Есть ли способ вернуть командную строку, которая будет выполнена с помощью Popen?Как получить командный прогон с подпроцессом Popen
command = Popen(['ls', '-l'])
Как я могу получить ls -l
из объекта команды? Я использую Python 2.7
Есть ли способ вернуть командную строку, которая будет выполнена с помощью Popen?Как получить командный прогон с подпроцессом Popen
command = Popen(['ls', '-l'])
Как я могу получить ls -l
из объекта команды? Я использую Python 2.7
Для python-2.7 аргументы не хранятся как в версии 3.3. То, что вам нужно сделать, это либо запомнить их, либо сделать обходной путь.
Одним из способов были бы написать свое собственное Наследование от Popen
или просто написать обертку вокруг Popen
:
from subprocess import _Popen
def Popen(*args, **kwds):
res = _Popen(*args, **kwds)
if not hasattr(res, "args"):
res.args = args[0]
return res
, конечно, вы можете хранить все позиционные и именованные аргументы, если вы хотите. До 3.3 атрибут args
не используется, но впоследствии он может быть защищен от этого, как показано выше.
Вы даже можете сделать чек один раз (при запуске) и использовать некоторые исправления обезьяны. Вот пример с наследованием:
from sys import version
import subprocess
class Popen(subprocess.Popen):
def __init__(self, *args, **kwds):
subprocess.Popen.__init__(self, *args, **kwds)
self.args = args[0]
if version[0] < 3 or (version[0]==3 and version[1] < 3): # pre 3.3
subprocess.Popen = Popen
Если вы используете Python 3, command.args
это самый простой способ:
from subprocess import Popen
command = Popen(['ls', '-l'])
print command.args
Выход:
['ls', '-l']
Обратите внимание, что выходной список.
Я иногда так делаю!
import subprocess,
cmd = ["ls", "-a" ]
proc = subprocess.Popen(cmd, stdout = subprocess.PIPE)
stdout = proc.communicate()[0]
Oh! Я получаю следующее: AttributeError: объект «Popen» не имеет атрибута «args», какую версию python вы используете? – Har
@Har Упс, я использую Python 3.5. Извините, я отредактирую свой ответ;) –
@Har Ну, я только что ушел. Кажется, что skyking имеет правильный ответ. –