有没有办法恢复使用Popen执行的命令行?
command = Popen(['ls', '-l'])
如何从命令对象中获取ls -l
?我正在使用python 2.7
答案 0 :(得分:3)
如果你正在使用Python 3,command.args
是最简单的方法:
from subprocess import Popen
command = Popen(['ls', '-l'])
print command.args
输出:
['ls', '-l']
请注意,输出是一个列表。
答案 1 :(得分:3)
对于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
答案 2 :(得分:0)
我有时会这样做!
import subprocess,
cmd = ["ls", "-a" ]
proc = subprocess.Popen(cmd, stdout = subprocess.PIPE)
stdout = proc.communicate()[0]