0

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

4

6 回答 6

1

看看http://docs.python.org/library/subprocess.html。这是启动外部程序时的当前方式。有很多例子,你必须自己检查哪一个最适合你的需要。

于 2012-10-15T07:55:44.173 回答
0

您可以这样做os.system(somestr),让您semestr在命令行上作为命令执行。然而,随着时间的推移,这已经被审查为不安全等(一旦我找到它就会发布一个链接)。

结果,它通常被替换为subprocess.popen

希望这可以帮助

于 2012-10-15T07:58:34.107 回答
0

如果您的目标程序期望输入 on ,您可以使用管道STDIN重定向:

python myfile.py | someprogram
于 2012-10-15T08:07:57.807 回答
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

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

于 2012-10-15T09:11:03.867 回答
0

根据您需要多少控制,您可能会发现使用pexpect更容易,这使得解析程序的输出变得相当容易,也可以很容易地用于与程序标准输入通信。查看网站,他们有一些很好的例子。

于 2012-10-15T08:04:46.247 回答
0

正如我刚刚回答了关于子流程的另一个问题,有一个更好的选择!

请看一下伟大的库python sh,它是一个成熟的 Python 子进程接口,它允许你调用任何程序,就好像它是一个函数一样,更重要的是,它是令人愉悦的 pythonic。

于 2012-10-15T08:58:05.797 回答