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

时间:2018-12-19 18:45:19

标签: python python-3.x subprocess

我在Python脚本中有以下代码

    inputfile = sys.argv[1];

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

当前,如果我运行它,它将挂起。我究竟做错了什么?我的猜测是inputfile参数不正确。

1 个答案:

答案 0 :(得分:0)

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

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)