我想使用 subshell 的魔力和 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)'
最佳答案
<(head tmp)
语法是 bash
称为“进程替换”的功能。基本/便携/bin/sh
不支持它。 (即使在 /bin/sh
和 /bin/bash
是同一个程序的系统上也是如此;当以普通 /bin/sh
调用时它不允许此功能,因此您不会无意中依赖非可移植功能。)
>>> subprocess.Popen(["/bin/bash", "-c", "cat <(head tmp)"])
<subprocess.Popen object at 0x1004cca50>
关于Python 子进程、子 shell 和重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7407667/