2

我在用

subprocess.call(['prog', 'arg'], shell=False)

执行 prog 并让我自己逃脱 arg。

现在有时 prog 需要来自 STDIN 的一些输入。在外壳中我可以使用

echo 'some input' | prog arg

使用管道。如何在不转义 arg 的情况下使用子进程执行此操作?这甚至可能吗?

或者是这样做的唯一方法

subprocess.call('echo "%s" | prog "%s"' % ('some input', 'arg'), shell=True)

这根本不安全。

4

1 回答 1

5
proc = subprocess.Popen(['prog', 'arg'], shell=False, stdin=subprocess.PIPE)
out, err = proc.communicate('some input')

这基本上就是call幕后的工作,除了周围的物体让你有机会调用communicate它。(然后返回码在proc.returncode.)

请注意,如果您想实际获取 stdout 或 stderr,则还需要将它们传递PIPE给构造函数。如上所述,它们都会以None.

文档


事后思考:如果你要打很多外部电话,你可能还想试一试plumbum;它做了一堆运算符重载hackery,以提供类似于shell的语法。

于 2013-02-28T01:11:09.177 回答