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
- Si prevede che la documentazione e la libreria standard abbiano idee diverse su ciò che è deprecato;
- C'è un errore nella documentazione e os.popen non è realmente deprecato;
- C'è un errore nella libreria standard e os.popen dovrebbe sollevare un avvertimento;
è 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.
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? –
Suppongo che in realtà un sacco di codice dipenda da questa funzione. – liori
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