2017-10-11 77 views
0

我已經得到了我用pyInstaller創建一個exe文件一點點Python應用程序:如何強制退出我的Python製作EXE

import subprocess 

try: 
    taskCommand = 'tasklist /FI "ImageName eq pc-client.exe"' 
    reply = subprocess.Popen(taskCommand, stdout = subprocess.PIPE).communicate()[0] 
    for line in reply.split("\n"): 
     if line.startswith("pc-client.exe"): 
      PID = line.split()[1] 
      print PID 
except: 
    pass 

try: 
    killCommand = ("TASKKILL /f /t /PID " + PID) 
    subprocess.Popen(killCommand, stdout = subprocess.PIPE).communicate()[0] 
except: 
    pass 

try: 
    print "Restarting Papercut Client..." 
    subprocess.Popen(r"\\server\path\to\file\filename.exe", stdout = subprocess.PIPE).communicate()[0] 
except: 
    pass 

sys.exit() 

當exe文件運行時,它開闢了窗口命令窗口,將運行其代碼(它是非交互式的),然後我希望窗口消失時,它完成!

我應該在Python代碼的末尾放置什麼,以使窗口在完成時關閉。我試過os.quit(),os._exit(),sys.quit()& sys.exit()但是他們都沒有關閉窗口!

由於我從我的代碼創建一個exe文件,我應該使用別的東西嗎?我無法編譯noconsole標誌,因爲它需要它來實際運行命令...

謝謝。

回答

0

您可以通過將

console=False 

在規範文件阻止上來,在所有的Windows命令提示符。例如:

exe = EXE(pyz, 
     a.scripts, 
     exclude_binaries=True, 
     name='YourApp', 
     console=False, 
     icon='IMGFolder\game_icon_cs6_icon.ico') 

如果您在命令行中沒有一個規範文件運行時,使用NOCONSOLE標誌:

pyinstaller.py --noconsole yourscript.py 

有關PyInstaller選項的詳細信息:https://pyinstaller.readthedocs.io/en/stable/usage.html#options

如果您想要提示出來然後關閉,sys.exit()爲我工作,但沒有看到更多的代碼,這將很難說。

UPDATE

由於子流程都參與其中,請記住,在命令提示符下將繼續開放,直到所有進程都解決了(父母和子女)。

它看起來像是用PID來殺死第一個任務(在殺死它之前我會打印出PID來確認你是否有正確的)。然後你運行第二個任務(你想運行的主文件?),但不要殺死它。

您是否試圖關閉命令提示符但保持運行.exe?

有關於這裏殺死進程一些有用的信息: How to kill a python child process created with subprocess.check_output() when the parent dies?

+0

啊,這是有道理的。所以我可以殺死父進程(我的代碼)一旦子進程(.exe文件)開始,讓它運行? – user3514446

+0

是的,但命令窗口不會消失,因爲您通過子進程調用產生了「從提示符中」運行的exe文件。除非我錯過了某些東西或誤解了目標。 – The4thIceman