2017-10-11 80 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