我有一个python脚本,它将提供一个输出文件。我需要将此输出文件提供给命令行程序。有什么方法可以调用命令行程序并控制它来处理python中的文件吗?
我试图运行此代码
import os
import subprocess
import sys
proc = subprocess.Popen(["program.exe"], stdin=subprocess.PIPE)
proc.communicate(input=sys.argv[1]) #here the filename should be entered
proc.communicate(input=sys.argv[2]) #choice 1
proc.communicate(input=sys.argv[3]) #choice 2
有什么方法可以输入来自命令行的输入。而且,虽然cmd程序在我运行代码后打开界面闪烁。
感谢。
注意:平台是windows
答案 0 :(得分:1)
看看http://docs.python.org/library/subprocess.html。这是启动外部程序时的当前方法。有很多例子,你必须检查自己最适合自己的需求。
答案 1 :(得分:0)
您可以执行os.system(somestr)
,它允许您在命令行上执行semestr
作为命令。但是,随着时间的推移,这一点已经过不安全的检查(我会在发现链接后立即发布)。
因此,它通常被subprocess.popen
希望这有帮助
答案 2 :(得分:0)
取决于您需要多少控制,您可能会发现使用pexpect更容易,这使得解析程序的输出变得相当简单,并且还可以轻松地用于与程序stdin进行对话。查看网站,他们有一些很好的例子。
答案 3 :(得分:0)
如果您的目标计划期望STDIN
上的输入,您可以使用pipe重定向:
python myfile.py | someprogram
答案 4 :(得分:0)
正如我刚刚回答another question关于子流程的问题,有一个更好的选择!
请查看伟大的库python sh,它是一个完整的Python子进程接口,允许您调用任何程序,就像它是一个函数一样,更重要的是,它是令人愉悦的pythonic。 / p>
答案 5 :(得分:0)
除了使用管道重定向数据流之外,您还可以处理命令行,例如:
mycode.py -o outputfile inputfilename.txt
您必须导入sys
import sys
在你的主要功能中:
ii=1
infile=None
outfile=None
# let's process the command line
while ii < len(sys.argv):
arg = sys.argv[ii]
if arg == '-o':
ii = ii +1
outfile = sys.argv[ii]
else:
infile=arg
ii = ii +1
当然,您可以添加一些文件检查等...