Python子进程和shell输入重定向

3
在Unix命令行中,我可以执行以下操作:
paste <(echo A) <(echo B)

然而,当我尝试这样做时:
import subprocess
subprocess.call('paste <(echo A) <(echo B)', shell = True)

I get this error:

/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `paste <(echo A) <(echo B)'

使用subprocess模块无法进行shell输入重定向吗?


5
这可能是因为你的shell正在运行 /bin/sh,而它不会执行该操作。你需要尝试强制使用 /bin/bash - Etan Reisner
1
谢谢Etan!我添加了executable='/bin/bash',现在可以工作了!你能留个答案吗? - tommy.carstensen
你尝试过使用 os.system('paste <(echo A) <(echo B)') 吗? - Zuko
Olu,那个也失败了。子进程文档中写道:“该模块旨在替换几个较旧的模块和函数:os.system”。 - tommy.carstensen
1个回答

1
许多东西默认使用/bin/sh作为首选的shell。 /bin/sh通常不是bash。
您系统上的/bin/sh很可能不支持进程替换。
说服subprocess.call改用/bin/bash作为shell,然后它应该可以工作。

再次感谢。这个方法很有效:subprocess.call('paste <(echo A) <(echo B)', shell = True, executable='/bin/bash') - tommy.carstensen
1
@tommy.carstensen:即使使用名称“/bin/sh”调用/bin/bash,也可能使用不同的兼容模式,例如没有进程替换。 - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接