如何强制退出我的 python 制作的 exe
How to force quit my python-made exe
我有一个 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 命令 window 中打开,将 运行 它的代码(它是非交互式的)然后我想要window 完成后消失!
我应该在我的 python 代码末尾放置什么以使 window 在完成时关闭。我已经尝试了 os.quit()、os._exit()、sys.quit() 和 sys.exit() 但是 none 实际上关闭了 window!
当我从我的代码创建一个 exe 时,我应该使用其他东西吗?我无法使用 noconsole 标志进行编译,因为它需要它来实际 运行 命令...
谢谢。
您可以通过输入
完全阻止 windows 命令提示符的出现
console=False
在您的规范文件中。例如:
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() 对我有用,但如果没有看到更多代码,则很难判断。
更新
由于涉及子进程,请记住命令提示符将保持打开状态,直到所有进程(父进程和子进程)都得到解决。
看起来你正在用它的 PID 杀死第一个任务(我会在你杀死它之前打印出 PID 以确认你有正确的任务)。然后你运行第二个任务(你想要的主文件运行?)但永远不要杀死它。
您是否尝试关闭命令提示符但保留 .exe 运行ning?
这里有一些关于终止进程的有用信息:
How to kill a python child process created with subprocess.check_output() when the parent dies?
我有一个 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 命令 window 中打开,将 运行 它的代码(它是非交互式的)然后我想要window 完成后消失!
我应该在我的 python 代码末尾放置什么以使 window 在完成时关闭。我已经尝试了 os.quit()、os._exit()、sys.quit() 和 sys.exit() 但是 none 实际上关闭了 window!
当我从我的代码创建一个 exe 时,我应该使用其他东西吗?我无法使用 noconsole 标志进行编译,因为它需要它来实际 运行 命令...
谢谢。
您可以通过输入
完全阻止 windows 命令提示符的出现console=False
在您的规范文件中。例如:
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() 对我有用,但如果没有看到更多代码,则很难判断。
更新
由于涉及子进程,请记住命令提示符将保持打开状态,直到所有进程(父进程和子进程)都得到解决。
看起来你正在用它的 PID 杀死第一个任务(我会在你杀死它之前打印出 PID 以确认你有正确的任务)。然后你运行第二个任务(你想要的主文件运行?)但永远不要杀死它。
您是否尝试关闭命令提示符但保留 .exe 运行ning?
这里有一些关于终止进程的有用信息: How to kill a python child process created with subprocess.check_output() when the parent dies?