Windows 用pyw文件启动不会关闭cmd
Windows startup with pyw file doesn't close cmd
我一直在编写一个应该 运行 在我的计算机后台运行的小脚本。我已经让脚本正常工作,除了一件 google 数小时的搜索和寻找都没有找到答案的东西。
该文件的扩展名为 .pyw,当我从命令提示符 运行 它时:
pythonw File.pyw
cmd window 将继续并给我另一个提示,而不会像使用常规 .py 文件那样启动空闲。
当我双击该文件时,cmd window 打开和关闭没有问题,就像它应该的那样。这对我来说太完美了。
但是,我尝试制作一个小的批处理文件:
cd C:\Users\(my name)\Desktop
pythonw File.pyw
我将其粘贴在 windows 的启动文件夹中。但是,当我重新启动计算机以查看它是否可以工作时,它打开了 cmd window,但不会关闭它。我不知道为什么。我已经尝试了所有我能想到的方法,包括将 File.pyw 直接粘贴到启动文件夹中,并尝试将退出命令放在批处理文件中,如下所示:
cd C:\Users\(my name)\Desktop
pythonw File.pyw
exit
但是,正如您可能猜到的那样,那失败了。我尝试将命令直接放在我的代码中,所以就在结束之前,它有行
os.system("exit")
但在意识到这行不通之后,我就把它拿出来了。 (重要细节:代码的最后一行设置为循环直到程序关闭。这就是我尝试使用 pyw 扩展名的原因,因此控制台可以在文件结束之前关闭)
接下来,我将批处理文件缩短为只有一行:
pythonw.exe C:\Users\(my name)\Desktop\File.pyw
但还是不行。当批处理文件是 运行 时,我得到一个打开的 cmd window 和输入的命令,但它 运行 就像一个普通的 .py 文件,而不是关闭 cmd window .
谁能帮我弄清楚为什么当命令是来自 .batch 文件的 运行 时控制台不会关闭,但是当命令提示符直接 运行 时控制台会关闭?
更新:
该脚本旨在添加一个快速键盘快捷键来关闭任务,特别是 Google Chrome,当我快速按两次“+”时。这是我的完整代码(减去一些个人信息)
import os
import sys
import pyHook, pythoncom
setting key to be '+' to avoid accidental usage.
def OnKeyBoardEvent(event):
global prevPlus, escPushed
if event.Ascii == 43:
if prevPlus == None:
prevPlus = event.Time
else:
if event.Time - prevPlus <= 1000:
os.system("taskkill /IM chrome.exe")
prevPlus = event.Time
else:
prevPlus = event.Time
elif event.Ascii == 27:
if escPushed == None:
escPushed = event.Time
else:
if event.Time - escPushed <= 1000:
sys.exit()
else:
escPushed = event.Time
getter = pyHook.HookManager()
getter.KeyDown = OnKeyBoardEvent
getter.HookKeyboard()
prevPlus = None
escPushed = None
pythoncom.PumpMessages()
当我从 pycharm 或从 cmd 运行 宁它时,这一切都完美地工作,但是当我把它放在 C:\Users(我的名字)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup然后试试看,没有任何反应。我猜这是因为 windows 运行s 文件并在任何事情发生之前退出它,但我真的不确定。我真的需要一个解决方案,让它在启动时 运行 并在我关闭之前接受我的按键输入。
所以,我最后的方法是 link 一个 VBS 文件(就像评论中提到的那样。)结果我做错了,并且混合了文件类型,所以我出现了奇怪的错误.那个 VBS 文件默默地调用了一个 BAT 文件,所以 cmd window 没有出现。然后那个 BAT 文件调用了我的程序,出于某种原因 运行 从 cmd 调用时比在现场执行时更好。现在,它在启动时 运行,并且 cmd window 没有出现,所以这是一个很好的修复,虽然效率低下。
在你的 .cmd 文件中使用 windows 'start' 命令;删除 'exit'。
像这样:
cd C:\Users\(my name)\Desktop
start pythonw File.pyw
我一直在编写一个应该 运行 在我的计算机后台运行的小脚本。我已经让脚本正常工作,除了一件 google 数小时的搜索和寻找都没有找到答案的东西。
该文件的扩展名为 .pyw,当我从命令提示符 运行 它时:
pythonw File.pyw
cmd window 将继续并给我另一个提示,而不会像使用常规 .py 文件那样启动空闲。
当我双击该文件时,cmd window 打开和关闭没有问题,就像它应该的那样。这对我来说太完美了。
但是,我尝试制作一个小的批处理文件:
cd C:\Users\(my name)\Desktop
pythonw File.pyw
我将其粘贴在 windows 的启动文件夹中。但是,当我重新启动计算机以查看它是否可以工作时,它打开了 cmd window,但不会关闭它。我不知道为什么。我已经尝试了所有我能想到的方法,包括将 File.pyw 直接粘贴到启动文件夹中,并尝试将退出命令放在批处理文件中,如下所示:
cd C:\Users\(my name)\Desktop
pythonw File.pyw
exit
但是,正如您可能猜到的那样,那失败了。我尝试将命令直接放在我的代码中,所以就在结束之前,它有行
os.system("exit")
但在意识到这行不通之后,我就把它拿出来了。 (重要细节:代码的最后一行设置为循环直到程序关闭。这就是我尝试使用 pyw 扩展名的原因,因此控制台可以在文件结束之前关闭)
接下来,我将批处理文件缩短为只有一行:
pythonw.exe C:\Users\(my name)\Desktop\File.pyw
但还是不行。当批处理文件是 运行 时,我得到一个打开的 cmd window 和输入的命令,但它 运行 就像一个普通的 .py 文件,而不是关闭 cmd window .
谁能帮我弄清楚为什么当命令是来自 .batch 文件的 运行 时控制台不会关闭,但是当命令提示符直接 运行 时控制台会关闭?
更新:
该脚本旨在添加一个快速键盘快捷键来关闭任务,特别是 Google Chrome,当我快速按两次“+”时。这是我的完整代码(减去一些个人信息)
import os
import sys
import pyHook, pythoncom
setting key to be '+' to avoid accidental usage.
def OnKeyBoardEvent(event):
global prevPlus, escPushed
if event.Ascii == 43:
if prevPlus == None:
prevPlus = event.Time
else:
if event.Time - prevPlus <= 1000:
os.system("taskkill /IM chrome.exe")
prevPlus = event.Time
else:
prevPlus = event.Time
elif event.Ascii == 27:
if escPushed == None:
escPushed = event.Time
else:
if event.Time - escPushed <= 1000:
sys.exit()
else:
escPushed = event.Time
getter = pyHook.HookManager()
getter.KeyDown = OnKeyBoardEvent
getter.HookKeyboard()
prevPlus = None
escPushed = None
pythoncom.PumpMessages()
当我从 pycharm 或从 cmd 运行 宁它时,这一切都完美地工作,但是当我把它放在 C:\Users(我的名字)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup然后试试看,没有任何反应。我猜这是因为 windows 运行s 文件并在任何事情发生之前退出它,但我真的不确定。我真的需要一个解决方案,让它在启动时 运行 并在我关闭之前接受我的按键输入。
所以,我最后的方法是 link 一个 VBS 文件(就像评论中提到的那样。)结果我做错了,并且混合了文件类型,所以我出现了奇怪的错误.那个 VBS 文件默默地调用了一个 BAT 文件,所以 cmd window 没有出现。然后那个 BAT 文件调用了我的程序,出于某种原因 运行 从 cmd 调用时比在现场执行时更好。现在,它在启动时 运行,并且 cmd window 没有出现,所以这是一个很好的修复,虽然效率低下。
在你的 .cmd 文件中使用 windows 'start' 命令;删除 'exit'。
像这样:
cd C:\Users\(my name)\Desktop
start pythonw File.pyw