【问题标题】:How to run and control a commandline program from python?如何从 python 运行和控制命令行程序?
【发布时间】:2012-10-15 07:53:00
【问题描述】:

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

【问题讨论】:

    标签: python csv cmd


    【解决方案1】:

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

    【讨论】:

    • >>> import shlex, subprocess >>> command_line = raw_input() /bin/vikings -input egg.txt -output "spam spam.txt" -cmd "echo '$MONEY'" > >> args = shlex.split(command_line) >>> print args ['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd' , "echo '$MONEY'"] >>> p = subprocess.Popen(args) # 成功! ------- 如果我使用 Windows,这是否适用...尽管从我在 Windows 中使用的代码来看,我对上面的代码不太熟悉
    【解决方案2】:

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

    因此,它通常被替换为subprocess.popen

    希望对你有帮助

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如果您的目标程序期待STDIN 的输入,您可以使用pipe 重定向:

        python myfile.py | someprogram
        

        【讨论】:

          【解决方案5】:

          正如我刚刚回答 another question 关于子流程一样,还有更好的选择!

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

          【讨论】:

            【解决方案6】:

            除了使用管道重定向数据流外,还可以处理命令行,例如:

            mycode.py -o outputfile inputfilename.txt
            

            你必须导入系统

            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
            

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

            【讨论】:

              猜你喜欢
              • 2017-01-02
              • 1970-01-01
              • 1970-01-01
              • 2012-11-10
              • 2020-04-26
              • 2020-05-09
              • 1970-01-01
              • 2019-01-27
              • 1970-01-01
              相关资源
              最近更新 更多