В режиме 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
Не поднимая предупреждение. Из трех возможных сценариев:
- Ожидается, что документация и стандартная библиотека будут иметь представление о том, что устарело;
- В документации есть ошибка, и os.popen на самом деле не рекомендуется;
- В стандартной библиотеке есть ошибка, и 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, в конце концов.
Какое это имеет значение? Почему вам нужно знать «правильную» причину? Он заявлен как устаревший и подпроцесс.Popen является заменой. Что еще нужно знать? Как он улучшает ваш код, чтобы его узнать? –
Я предполагаю, что на самом деле много и много кода зависят от этой функции. – liori
Уважаемый С.Лотт, я знаю, что не всегда легко говорить, что не-родной английский оратор всегда совершенно ясен, и поэтому я прошу прощения, если то, что я пишу, нелегко понять. Но не могли бы вы, пожалуйста, по крайней мере, попытаться прочитать мой вопрос? Я не спрашиваю, в чем причина. Я спрашиваю, кто или что не так: документы, выпущенный код Python или я, ожидая, что оба они согласованы. – krawyoti