2009-07-08 2 views
7

В режиме on-line documentation указано, что os.popen теперь устарел. Все остальные устаревшие функции должным образом поднимают значение «Оскорбление». Например:Действительно ли os.popen устарел в 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] 

Функция os.popen, с другой стороны, завершает беззвучно:

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

Не поднимая предупреждение. Из трех возможных сценариев:

  1. Ожидается, что документация и стандартная библиотека будут иметь представление о том, что устарело;
  2. В документации есть ошибка, и os.popen на самом деле не рекомендуется;
  3. В стандартной библиотеке есть ошибка, и os.popen должен вызывать предупреждение;

какой из них правильный?

Для справочной информации, вот Python я использую:

>>> 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)] 

Аргумент os.popen берется из reply of mine здесь на переполнение стека.

Добавление: Благодаря cobbal below, оказывается, что os.popen не рекомендуется в Python 3.1, в конце концов.

+1

Какое это имеет значение? Почему вам нужно знать «правильную» причину? Он заявлен как устаревший и подпроцесс.Popen является заменой. Что еще нужно знать? Как он улучшает ваш код, чтобы его узнать? –

+1

Я предполагаю, что на самом деле много и много кода зависят от этой функции. – liori

+3

Уважаемый С.Лотт, я знаю, что не всегда легко говорить, что не-родной английский оратор всегда совершенно ясен, и поэтому я прошу прощения, если то, что я пишу, нелегко понять. Но не могли бы вы, пожалуйста, по крайней мере, попытаться прочитать мой вопрос? Я не спрашиваю, в чем причина. Я спрашиваю, кто или что не так: документы, выпущенный код Python или я, ожидая, что оба они согласованы. – krawyoti

ответ

4

Одна вещь, о которой я могу думать, это то, что os.popen существует в python3, а os.popen2 - нет. Таким образом, один из них «более устарел», чем другой, и запланирован для скорейшего удаления с языка.

+0

Это интересно: не только os.popen все еще присутствует в Python 3.1, но даже не устарел. См. Http://docs.python.org/3.1/library/os.html – krawyoti

5

Вот 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

В то же время я открыл ticket на вопрос трекере Python. Я оставлю этот вопрос открытым до тех пор, пока билет не будет закрыт.

+0

Поздравляем вас с вопросом о таком перцептивном вопросе и помогаем этому несоответствию к закрытию через формальные каналы. Пока это похоже на то, что попен останется и получит документацию. Ура! Команды – nealmcb