2013-06-17 4 views
0

Я запускаю несколько портативных приложений из своего приложения python.Запуск внешнего EXE из 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 или питона?

2) Если я изменяю PORTABLE_APP_LOCATION на путь до a portable version of CDBurnerXP и используйте вместо опции CreateProcess параметр ShellExecuteEx, я вижу, что процесс запускается в диспетчере задач Windows, но фактическое окно приложения не отображается. Это не происходит с другими EXE, такими как переносимая версия GIMP, которые появляются после запуска. Я предполагаю, что это отличие происходит от свойства исполняемых файлов. Кто-нибудь знает, что вызывает это?

3) На каких условиях Windows запрашивает «Вы уверены, что хотите запустить этот EXE»? Я считаю, что CDBurnerXP подписан с сертификатом, но иногда Windows вызывает этот вопрос при попытке запустить этот EXE изнутри python.

Большое спасибо.

ответ

0

Я новичок в этой области. Может быть, это может помочь вам

subprocess.call использования, подробнее here:

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

или

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

я надеюсь, что это поможет вам ...

+0

Мне известны другие варианты выполнения таких файлов, как 'os.system' и' subprocess.call'. Это не то, что я спросил:/ – user1555863

1

О Ваш первый вопрос, вы следует обратить внимание на то, что при выполнении кода python с использованием pythonw.exe времени выполнения, ваш sys.stdout буфер ограничен Байты, и когда переполнение будет вызывать IOError, который вы не увидите, потому что код работает без окон.

+0

Хорошая точка. Спасибо за головы. – user1555863

Смежные вопросы