Die Online-documentation besagt, dass os.popen jetzt veraltet ist. Alle anderen veralteten Funktionen verursachen ordnungsgemäß ein DeprecationWarning. Zum Beispiel:Ist os.popen in Python 2.6 wirklich veraltet?
>>> 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]
Die Funktion os.popen, auf der anderen Seite, ergänzt leise:
>>>len(list(os.popen('ps h -eo pid:1,command')))
202
Ohne eine Warnung zu erhöhen. Von den drei möglichen Szenarien
- Es wird erwartet, dass die Dokumentation und die Standardbibliothek unterschiedliche Vorstellungen davon haben, was veraltet ist.
- Es liegt ein Fehler in der Dokumentation vor und os.popen ist nicht wirklich veraltet;
- Es gibt einen Fehler in der Standardbibliothek und os.popen sollte eine Warnung auslösen;
welche ist die richtige?
Hintergrundinformationen, hier ist der Python Ich verwendet:
>>> 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)]
Das Argument os.popen von einem reply of mine hier auf Stack-Überlauf genommen wird.
Nachtrag: Dank cobbal below stellt sich heraus, dass os.popen in Python 3.1 nicht veraltet ist.
Worauf kommt es an? Warum müssen Sie den "richtigen" Grund wissen? Es wird als veraltet bezeichnet und subprocess.Popen ist der Ersatz. Was müssen Sie noch wissen? Wie verbessert es Ihren Code, um es zu wissen? –
Ich denke, dass tatsächlich sehr viel Code von dieser Funktion abhängt. – liori
Lieber S.Lott, ich weiß, dass es für einen nicht-englischen Muttersprachler nicht immer einfach ist, immer vollkommen klar zu sein, und deshalb entschuldige ich mich, wenn das, was ich schreibe, nicht leicht verständlich ist. Könntest du bitte, bitte bitte, zumindest versuchen, meine Frage zu lesen? Ich frage nicht, was der Grund ist. Ich frage, wer oder was nicht stimmt: die Dokumente, der freigegebene Python-Code oder ich erwarte, dass beide konsistent sind. – krawyoti