我正在尝试编写一个实用程序,它将在 Python 中无缝地将无限量的命令连接在一起。这是我到目前为止提出的,遵循管道中的文档subprocess
:
from subprocess import Popen, PIPE, STDOUT
def taskchain(argset, result=STDOUT):
lastprocess = None
for index, args in enumerate(argset): # expected to be a list containing lists
process = Popen(args, stdout=stdout if index == (len(argset)-1) else PIPE,
stdin=None if lastprocess is None else lastprocess.stdout)
if lastprocess is not None:
lastprocess.stdout.close()
lastprocess = process
if stdout == PIPE:
return lastprocess.communicate()[0]
else:
lastprocess.wait()
请注意,我不是shell=True
为了避免那里的安全问题而使用。
不幸的是,这不起作用,因为我得到:
OSError: [Errno 9] Baf file descriptor
我不确定什么似乎失败了。有人可以帮我编写一种方法来为无限数量的子流程实现流程链接吗?
(用例是这样的:taskchain([('ps', 'aux'), ('grep', 'python'), ('cut', '-b', '1')])
。)