2009-07-08 17 views
7

El documentation en línea indica que os.popen ahora está en desuso. Todas las demás funciones desaprobadas generan un Aviso de eliminación de depreciaciones. Por ejemplo:¿Está os.popen realmente obsoleto en 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 función os.popen, por el contrario, se completa en silencio:

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

Sin levantar una advertencia. De los tres escenarios posibles

  1. Se espera que la documentación y la biblioteca estándar tengan ideas diferentes de lo que está en desuso;
  2. Hay un error en la documentación y os.popen no está realmente en desuso;
  3. Hay un error en la biblioteca estándar y os.popen debe generar una advertencia;

cuál es la correcta?

Para obtener información general, aquí está el pitón que estoy 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)] 

El argumento para os.popen se toma de una reply of mine aquí en desbordamiento de pila.

Addendum: Gracias a cobbal below, resulta que os.popen no está en desuso en Python 3.1, después de todo.

+1

¿Qué importancia tiene? ¿Por qué necesitas saber la razón "correcta"? Se afirma como obsoleto y como subproceso. Popen es el reemplazo. ¿Qué mas necesita saber? ¿Cómo mejora tu código para saberlo? –

+1

Supongo que en realidad muchos códigos dependen de esta función. – liori

+3

Estimado S.Lott: Sé que no siempre es fácil para un hablante de inglés no nativo estar siempre perfectamente claro, por lo que me disculpo si lo que escribo no es fácil de entender. ¿Pero podrías, por favor, por favor, al menos hacer un esfuerzo para leer mi pregunta? No estoy preguntando cuál es la razón. Pregunto quién o qué está mal: los documentos, el código de Python publicado o yo esperando que ambos sean consistentes. – krawyoti

Respuesta

4

Una cosa que se me ocurre es que os.popen existe en python3, mientras que os.popen2 no. Entonces uno está "más en desuso" que el otro, y está programado para una eliminación más rápida del idioma.

+0

Eso es interesante: no solo os.popen todavía está allí en Python 3.1, sino que ni siquiera está en desuso. Ver http://docs.python.org/3.1/library/os.html – krawyoti

5

Aquí está el 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

Mientras tanto he abierto una ticket en el seguimiento de incidencias Python. Mantendré abierta esta pregunta hasta que se cierre el ticket.

+0

Felicitaciones por hacer una pregunta tan perspicaz y ayudar a impulsar esta discrepancia hacia el cierre a través de canales formales. Hasta ahora, parece que Popen se mantendrá y obtendrá documentación. ¡Hurra! Los comandos – nealmcb