如何从python运行和控制命令行程序?

时间:2012-10-15 07:53:00

标签: python csv cmd

我有一个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

6 个答案:

答案 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

当然,您可以添加一些文件检查等...