【问题标题】:Python subprocess and shell input redirectionPython 子进程和 shell 输入重定向
【发布时间】:2023-03-06 00:47:02
【问题描述】:

在 unix 命令行上我可以做到:

paste <(echo A) <(echo B)

但是,当我尝试这样做时:

import subprocess
subprocess.call('paste <(echo A) <(echo B)', shell = True)

我收到此错误:

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

子进程模块不能做shell输入重定向吗?

【问题讨论】:

  • 这可能正在运行/bin/sh 作为你的shell,它不会这样做。您需要尝试强制它使用/bin/bash
  • 感谢伊坦!我添加了 executable='/bin/bash' 并且它起作用了!你会留下答案吗?
  • 你尝试过 os.system('paste ..?
  • Olu,那个也失败了。子流程文档中写道:“这个模块打算替换几个旧模块和功能:os.system”

标签: python shell python-3.x subprocess io-redirection


【解决方案1】:

很多东西默认使用/bin/sh 作为shell 的选择。 /bin/sh 通常不是 bash。

您系统上的/bin/sh 很可能不支持进程替换。

说服subprocess.call 使用/bin/bash 作为外壳,它应该可以工作。

【讨论】:

  • 再次感谢您。这成功了: subprocess.call('paste
  • @tommy.carstensen: 即使/bin/bash 使用名称/bin/sh 调用也可能使用不同的兼容模式,即没有进程替换。
猜你喜欢
  • 2011-11-16
  • 2022-01-14
  • 1970-01-01
  • 2021-03-25
  • 2013-10-08
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多