我正在运行我的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时会弹出这个问题。
非常感谢。
答案 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"')
我希望它可以帮助你...