5

我想使用 python 子进程模块的子shell 和重定向的魔力,但它似乎不起作用,抱怨意外标记是括号。例如,命令

cat <(head tmp)

当传递给子进程时给出了这个

>>> subprocess.Popen("cat <(head tmp)", shell=True)
<subprocess.Popen object at 0x2b9bfef30350>
>>> /bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `cat <(head tmp)'
4

1 回答 1

11

<(head tmp)语法是一种bash称为“进程替换”的功能。基本/便携式/bin/sh不支持它。(即使在相同程序的系统上也是如此/bin/sh/bin/bash当以普通方式调用时,它不允许此功能,/bin/sh因此您不会无意中依赖于不可移植的功能。)

>>> subprocess.Popen(["/bin/bash", "-c", "cat <(head tmp)"])
<subprocess.Popen object at 0x1004cca50>
于 2011-09-13T20:01:54.103 回答