【问题标题】:How to run external executable using Python?如何使用 Python 运行外部可执行文件?
【发布时间】:2012-10-24 17:45:29
【问题描述】:

我有一个外部可执行文件,我试图从 Python 脚本运行它。 CMD 可执行文件运行但不生成输出。可能它在生成输出之前退出。关于如何延迟退出直到生成输出有什么建议吗?

import subprocess, sys
from subprocess import Popen, PIPE
exe_str = r"C:/Windows/System32/cmd C:/temp/calc.exe"

parent = subprocess.Popen(exe_str, stderr=subprocess.PIPE)

【问题讨论】:

  • 也许你是对的。输入数据是高程和流向,这就是我在这里发布它的原因。
  • DOS?您不是指命令行界面 (CLI) 应用程序吗? MS-DOS 已于 12 年前停用。
  • 是的,我的意思是命令提示符。感谢您的澄清。
  • 它在 SO 示例中使用 os: import sys, string, os os.chdir( 'c:\\temp' ) os.system( '"C:\\temp\\calc.exe"' ) 不知道为什么子进程不工作。

标签: python subprocess executable


【解决方案1】:

在尝试了其他所有方法后,这对我有用: 将 python 程序的位置更改为与.exe 所在的位置相同。 然后很简单:

subprocess.call("calc.exe")

会起作用的。

【讨论】:

    【解决方案2】:

    选项 1

    import subprocess
    
    subprocess.call('C:\Windows\System32\calc.exe')
    

    选项 2

    subprocess.Popen(['C:\Windows\System32\calc.exe'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True).communicate()
    

    选项 3

    import os
    os.system('C:\Windows\System32\calc.exe')
    

    【讨论】:

    • 谢谢。可能有助于展示这些调用之间的区别。
    【解决方案3】:

    os.system 方法已弃用,不应在新应用程序中使用。 subprocess 模块是执行所需操作的 Python 方式。

    这是我几周前使用subprocess 加载文件时编写的一些代码示例,您需要用于延迟退出直到收到数据并且启动的程序完成的命令是wait()

    import subprocess
    
    cmd = "c:\\file.exe"
    process = subprocess.Popen(cmd, stdout=subprocess.PIPE, creationflags=0x08000000)
    process.wait()
    

    creationflags=0x08000000 是一个可选参数,用于抑制窗口的启动,如果您正在调用的程序不需要直接看到,它会很有用。

    【讨论】:

    • 它仍然没有产生输出。从 cmd 窗口完美运行,但没有按照您的建议使用 pythonic 方式输出。
    【解决方案4】:

    使用subprocess.call,更多信息here

    import subprocess
    subprocess.call(["C:\\temp\\calc.exe"])
    

    import os
    os.system('"C:/Windows/System32/notepad.exe"')
    

    希望对你有帮助……

    【讨论】:

    • 它运行但不产生输出。我使用 cmd 测试了可执行文件,它至少需要 2-3 秒才能生成输出。这就是问题所在,如何让它在使用 python 退出前保持 3 秒?
    • 很奇怪。即使在 3 秒的条件下,它也不会产生任何输出。我增加了时间,但没有用。不知道还有什么问题。
    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 2018-08-06
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多