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