我有一个程序,我从命令行运行,如下所示:
$ 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代码运行我的程序。
有人可以帮忙吗?提前谢谢!
答案 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