从python运行外部EXE

时间:2013-06-17 11:49:29

标签: python

我正在运行我的python应用程序中的几个便携式应用程序。

请考虑以下代码:

import win32com.shell.shell as w32shell
import os
import sys
import win32process as process

PORTABLE_APP_LOCATION = "C:\\Windows\\System32\\calc.exe"

#This function runs a portable application:
def runPortable():
    try:
        startObj = process.STARTUPINFO()
        process.CreateProcess(PORTABLE_APP_LOCATION,None,None,None,8,8,None,None,startObj)
        # OR
        #w32shell.ShellExecuteEx(lpFile=PORTABLE_APP_LOCATION)
    except:
        print(sys.exc_info()[0])
runPortable()

1)我是否应该期望从pythonw或python执行此代码的任何差异?

2)如果我将PORTABLE_APP_LOCATION更改为a portable version of CDBurnerXP的路径并使用ShellExecuteEx选项而不是CreateProcess,我看到该过程是在Windows任务管理器上启动的,但应用程序的实际窗口是'可见。对于其他EXE(例如在运行后显示的GIMP的可移植版本)不会发生这种情况。我假设这种差异来自可执行文件的属性。谁知道是什么导致了这个?

3)Windows在什么条件下提示“你确定要运行这个EXE”吗?我相信CDBurnerXP是使用证书签名的,但有时Windows在尝试从python中运行此EXE时会弹出这个问题。

非常感谢。

2 个答案:

答案 0 :(得分:1)

关于您的第一个问题,您应该注意在使用 pythonw.exe 运行时执行python代码时, sys.stdout 缓冲区仅限于 4096 < / strong>字节和溢出时会抛出一个你不会看到的IOError,因为代码运行无窗口。

答案 1 :(得分:0)

我是这个领域的新手。可能这可以帮到你

使用subprocess.call,更多信息here

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

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

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