【问题标题】:Using python to run another program?使用python运行另一个程序?
【发布时间】:2011-10-20 04:51:24
【问题描述】:

我有一个从命令行运行的程序,如下所示:

$ 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 posthere 的帖子,它们似乎描述了针对我的问题的类似解决方案。不幸的是,在阅读了这些帖子之后,我似乎仍然无法让我的 Python 代码运行我的程序。

有人可以帮忙吗?提前致谢!

【问题讨论】:

    标签: python python-3.x subprocess


    【解决方案1】:

    subprocess.Popen 需要一个字符串数组。该数组中的两个项目是文件句柄。您需要将实际文件 name 传递给您尝试运行的程序。

    cmd = ['/Users/me/src/program', 'a.txt', 'b.txt']
    

    您可以完全摆脱with open(...) as ... 行。

    【讨论】:

    • 感谢您的帮助,我不知何故错过了 subprocess.Popen() 需要字符串而不是文件句柄。您的解决方案非常有效!
    【解决方案2】:

    根据您的要求,os.system(cmdline) 可能是最简单的解决方案。

    【讨论】:

      【解决方案3】:

      看看@Chris's answer,还有:

      子进程不等待命令完成,所以你应该使用wait 方法。

      process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
      process.wait()
      for line in process.stdout:
          print(line)
      

      【讨论】:

      • 感谢您指出 wait 方法 - 我不知道这一点。
      • 如果你想在它还在运行的时候换行,看我的回答。
      【解决方案4】:

      不建议将subprocess.wait()stdout=subprocess.PIPE 一起使用。

      with subprocess.Popen(cmd, stdout=subprocess.PIPE) as proc:
          print(proc.stdout.read())
      

      您不必致电subprocess.wait()。这将打印proc 的实时标准输出,父进程将等待proc 的终止。

      查看这些网址了解更多信息。

      【讨论】:

        猜你喜欢
        • 2023-03-28
        • 2021-04-17
        • 2023-03-30
        • 2012-07-06
        • 1970-01-01
        • 2021-09-14
        • 1970-01-01
        • 2018-11-10
        • 1970-01-01
        相关资源
        最近更新 更多