使用Python运行另一个程序?

15

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

$ 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)

我阅读了这篇帖子这篇帖子,它们似乎描述了与我的问题类似的解决方案。不幸的是,在阅读了这些帖子之后,我仍然无法使我的Python代码运行程序。

有人能帮忙吗?谢谢!

4个回答

28

参考@Chris的回答,此外:

子进程并不等待命令执行完毕,因此应该使用wait方法。

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

2
谢谢您指出wait方法 - 我之前不知道这个。 - drbunsen
如果您想在程序运行时查看行数,请参考我的答案。 - agf

24

subprocess.Popen 方法需要一个字符串数组参数,其中数组中的两个元素是文件句柄。你需要传递实际的文件名给你要运行的程序。

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

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


谢谢您的帮助,我不知道subprocess.Popen()需要字符串而不是文件句柄。您的解决方案非常有效! - drbunsen

13

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


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接