如何使用子进程Popen运行命令

问题描述 投票:3回答:3

有没有办法恢复使用Popen执行的命令行?

command = Popen(['ls', '-l'])

如何从命令对象中获取ls -l?我正在使用python 2.7

python python-2.7
3个回答
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

3
投票

如果您使用的是Python 3,command.args是最简单的方法:

from subprocess import Popen
command = Popen(['ls', '-l'])

print command.args

输出:

['ls', '-l']

请注意,输出是一个列表。


0
投票

我有时会这样做!

import subprocess,
cmd = ["ls", "-a" ]
proc = subprocess.Popen(cmd, stdout = subprocess.PIPE)
stdout = proc.communicate()[0]
© www.soinside.com 2019 - 2024. All rights reserved.