用python运行另一个程序?

问题描述 投票:11回答:4

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

$ 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代码运行我的程序。

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

python python-3.x subprocess
4个回答
19
投票

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

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

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


20
投票

看看@Chris's answer,还有:

子进程不等待命令完成,因此您应该使用wait方法。

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

8
投票

根据您的要求,qazxsw poi可能是最简单的解决方案。


0
投票

建议不要使用os.system(cmdline)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

© www.soinside.com 2019 - 2024. All rights reserved.