2009-07-08 21 views
7

Il numero online documentation afferma che os.popen è ora deprecato. Tutte le altre funzioni deprecate sollevano debitamente un DeprecationWarning. Per esempio:È os.popen davvero deprecato in Python 2.6?

>>> import os 
>>> [c.close() for c in os.popen2('ps h -eo pid:1,command')] 
__main__:1: DeprecationWarning: os.popen2 is deprecated. Use the subprocess module. 
[None, None] 

La funzione os.popen, d'altra parte, completa silenziosamente:

>>>len(list(os.popen('ps h -eo pid:1,command'))) 
202 

Senza sollevare un avvertimento. Dei tre possibili scenari

  1. Si prevede che la documentazione e la libreria standard abbiano idee diverse su ciò che è deprecato;
  2. C'è un errore nella documentazione e os.popen non è realmente deprecato;
  3. C'è un errore nella libreria standard e os.popen dovrebbe sollevare un avvertimento;
quale

è quello giusto?

Per informazioni di base, ecco il pitone che sto usando:

>>> import sys 
>>> print sys.version 
2.6.2 (r262:71600, May 12 2009, 10:57:01) 
[GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)] 

L'argomento di os.popen è preso da un reply of mine qui su Stack Overflow.

addendum: Grazie a cobbal below, si scopre che os.popen non è deprecato in Python 3.1, dopo tutto.

+1

Che importa? Perché hai bisogno di conoscere la ragione "corretta"? È rivendicato come deprecato e sottoprocesso.Popen è la sostituzione. Cos'altro hai bisogno di sapere? Come migliora il tuo codice per saperlo? –

+1

Suppongo che in realtà un sacco di codice dipenda da questa funzione. – liori

+3

Caro S.Lott, so che non è sempre facile per un madrelingua inglese non sempre perfettamente chiaro, e quindi mi scuso se ciò che scrivo non è facilmente comprensibile. Ma potresti per favore, per favore, per favore, sforzati di leggere la mia domanda? Non sto chiedendo quale sia la ragione. Sto chiedendo chi o cosa non va: i documenti, il codice Python rilasciato, o me stesso in attesa che entrambi siano coerenti. – krawyoti

risposta

4

una cosa che mi viene in mente è che os.popen esiste in python3, mentre os.popen2 non lo fa. Quindi uno è "più deprecato" dell'altro e pianificato per una rimozione più rapida dalla lingua.

+0

Questo è interessante: non solo os.popen è ancora lì in Python 3.1 ma non è nemmeno deprecato. Vedi http://docs.python.org/3.1/library/os.html – krawyoti

5

Ecco il PEP.

Deprecated modules and functions in the standard library: 

    - buildtools 
    - cfmfile 
    - commands.getstatus() 
    - macostools.touched() 
    - md5 
    - MimeWriter 
    - mimify 
    - popen2, os.popen[234]() 
    - posixfile 
    - sets 
    - sha 
3

Nel frattempo ho aperto un ticket sulla questione inseguitore Python. Terrò questa domanda aperta fino alla chiusura del biglietto.

+0

Congratulazioni per aver fatto una domanda così perspicace e per aver contribuito a spingere questa discrepanza verso la chiusura attraverso canali formali. Finora sembra che i popen rimarranno in giro e otterranno documentazione. Sìì! I comandi – nealmcb

Problemi correlati