如何使用subprocess.run使用管道调用shell命令?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (368)

我在Python脚本中有以下代码

    inputfile = sys.argv[1];

    subprocess.run(["cat",
            inputfile, "| sh script1.sh | sh script2.sh | uniq  > outputfile.txt"], check=True, shell=True)

目前,如果我运行它会出错。我究竟做错了什么?我的猜测是inputfile参数不正确。

提问于
用户回答回答于

当你使用时shell=True,第一个参数subprocess.run应该是一个字符串,而不是一个列表。传递列表时,只使用第一个元素,因此您的调用等效于:

subprocess.run("cat", check=True, shell=True)

...当然,这将永远等待输入。

更新

所以你的命令必须像这样:

subprocess.run("cat {} | sh script1.sh | sh script2.sh | uniq  > outputfile.txt".format(inputfile),
               check=True, shell=True)

扫码关注云+社区

领取腾讯云代金券