如何手动关闭 .pyw 文件

4

我有一个Python程序,它永远不会自动退出。但是,它某个时刻必须退出。它必须在没有控制台的情况下运行,因此我将其保存为.pyw文件,但这意味着没有X可以单击以关闭它。 在不重新启动计算机的情况下,我该如何手动关闭它?我在Windows上,如果需要,可以使用命令行。


1
如果你不打算更改程序,那么它是用Python编写的这一事实并不重要...但是“在Windows下运行”是重要的。请参阅http://stackoverflow.com/q/16487579/2564301获取一般方法。 - Jongware
3个回答

4
如果你只有一个pythonw在运行,你可以执行taskkill /IM pythonw.exe /F命令来关闭它。在终端中输入此命令或在桌面或任何其他地方创建一个链接即可。

您也可以实现自己的“通信协议”来关闭特定程序:您让pyw在您计算机上的某个位置写一个空文件。然后,在无限循环中检查是否有像“close”这样的字符串。现在,您可以运行程序并使用记事本或另一个Python程序编辑文件,并将字符串“close”放入其中。但是,只有当您可以使用无限循环时才能实现此操作。如果您有一个tkinter窗口,则可以将mainloop()函数替换为自己的无限循环,该循环每次调用root.update()。另一种选择是使用线程。 - famemaker
我将这段代码写成了注释,因为这种方法比我的答案要困难得多。如果我同时打开了多个.pyw文件,这就是我的解决方案。 - famemaker

0

你可以在你的脚本中包含线程来接收输入

from pynput.keyboard import Key, Listener
import threading
import sys

def on_press(key):
    global pause
    if str(format(key))[1]=='`':
        sys.exit()

def fun():
    YOUR CODE HERE

threading.Thread(target=fun).start()

with Listener(
        on_press=on_press) as listener:
    listener.join()

按下“`”键将退出您的代码

sys.exit()将停止主线程,但您需要以一种方式管理fun()线程,使其也结束以实际结束程序


0
你可以创建一个文件。.pyw程序应该每1秒钟检查一次它。如果文件发生变化,请在.pyw程序中运行quit()命令。但不要每个tick都检查它,因为文件处于“正在更改”的状态下会失败。
示例:
### Do Something here...

from datetime import datetime
last = 0 #Record the last time to do checking, for now, just put it to any number you want
while True:
    now = datetime.now()
    second = now.second
    if now != second:
        ### Do checking here for example, a file called "quit_state.txt"
        date = open("quit_state.txt",'r').read().strip() ### Strip the data
        if date == "quit":
            quit()

只需将文件数据更改为quit,程序就会停止


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接