用python运行另一个程序?

时间:2011-08-04 16:57:38

标签: python python-3.x subprocess

我有一个程序,我从命令行运行,如下所示:

$ program a.txt b.txt

该程序需要两个文本文件作为参数。我正在尝试编写一个Python 3.2脚本来运行上述程序。我怎样才能做到这一点?目前,我正在尝试使用subprocess这样的模块:

import subprocess

with open("a.txt", mode="r") as file_1:
    with open("b.txt", mode="r") as file_2:
        cmd = ['/Users/me/src/program', file_1, file_2]
        process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
        for line in process.stdout:
            print(line)

我看过this post和帖子here,它们似乎描述了我的问题的类似解决方案。不幸的是,在阅读这些帖子后,我仍然无法让我的Python代码运行我的程序。

有人可以帮忙吗?提前谢谢!

4 个答案:

答案 0 :(得分:19)

subprocess.Popen需要一个字符串数组。该数组中的两个项目是文件句柄。您需要将实际文件 name 传递给您尝试运行的程序。

cmd = ['/Users/me/src/program', 'a.txt', 'b.txt']

你可以完全摆脱with open(...) as ...行。

答案 1 :(得分:19)

查看@Chris's answer,还有:

Subprocess不会等待命令完成,因此您应该使用wait方法。

    process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    process.wait()
    for line in process.stdout:
        print(line)

答案 2 :(得分:8)

根据您的要求,os.system(cmdline)可能是简单的解决方案。

答案 3 :(得分:0)

不建议将subprocess.wait()stdout=subprocess.PIPE一起使用。

with subprocess.Popen(cmd, stdout=subprocess.PIPE) as proc:
    print(proc.stdout.read())

您不必致电subprocess.wait()。这将打印proc的实时标准输出,并且父进程将等待proc的终止。

检查这些网址以获取更多信息。

https://docs.python.org/3.5/library/subprocess.html#popen-objects https://docs.python.org/3.5/library/subprocess.html#popen-constructor