23

我有一个外部可执行文件,我试图从 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)
4

4 回答 4

20

使用subprocess.call,更多信息在这里

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

或者

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

我希望它可以帮助你...

于 2012-11-01T12:40:33.557 回答
13

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

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

import subprocess

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

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

于 2012-11-01T13:47:48.890 回答
5

选项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')
于 2018-06-14T12:38:33.360 回答
0

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

subprocess.call("calc.exe")

会工作。

于 2019-04-22T16:15:21.763 回答