如何强制退出我的python-made exe

时间:2017-10-11 14:16:00

标签: python-2.7 pyinstaller

我有一个小python应用程序,我使用pyInstaller来创建一个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时,它会在windows命令窗口中打开,运行其代码(它是非交互式的),然后我希望窗口在完成后消失!

我应该在我的python代码的末尾放置什么来完成窗口关闭。我已经尝试过os.quit(),os._exit(),sys.quit()& sys.exit()但它们都没有关闭窗口!

当我从我的代码创建一个exe时,我应该使用其他东西吗?我无法使用noconsole标志进行编译,因为它需要它来实际运行命令...

感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过添加

来阻止Windows命令提示符出现
console=False

在您的spec文件中。例如:

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

如果从没有spec文件的命令行运行,请使用noconsole标志:

pyinstaller.py --noconsole yourscript.py

有关PyInstaller选项的更多信息:https://pyinstaller.readthedocs.io/en/stable/usage.html#options

如果你想要提示然后关闭,sys.exit()对我有用,但是没有看到更多的代码就很难说。

<强>更新

由于涉及子进程,请记住命令提示符将保持打开状态,直到所有进程都已解析(父进程和子进程)。

看起来你正在用它的PID杀死第一个任务(我会在你杀死它之前打印掉PID以确认你有正确的PID)。然后你运行第二个任务(你想要运行的主文件?)但从不杀死它。

您是否尝试关闭命令提示符但保持.exe运行?

这里有关于杀戮过程的一些很好的信息: How to kill a python child process created with subprocess.check_output() when the parent dies?