Python子进程,子shell和重定向

时间:2011-09-13 19:55:03

标签: python bash subprocess subshell

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

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)'

1 个答案:

答案 0 :(得分: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>