python - 使用pyw文件的Windows启动不会关闭cmd

标签 python windows startup pyhook pythoncom

我一直在研究一个应该在我的计算机后台运行的小脚本。我已经让脚本正常工作,除了谷歌搜索和狩猎数小时没有找到答案之外的所有内容。

该文件的扩展名为 .pyw,当我从命令提示符运行它时:

pythonw File.pyw

cmd 窗口将继续并给我另一个提示,而不会像使用常规 .py 文件那样启动空闲状态。

当我双击文件时,cmd 窗口打开和关闭没有问题,就像它应该的那样。这一切对我来说都是完美的。

但是,我尝试制作一个小的批处理文件:

cd C:\Users\(my name)\Desktop
pythonw File.pyw

然后我将其粘贴在 Windows 的启动文件夹中。但是,当我重新启动计算机以查看它是否可以工作时,它打开了 cmd 窗口,但不会关闭它。我不知道为什么。我已经尝试了所有我能想到的方法,包括将 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 窗口,但它像普通的 .py 文件一样运行,没有关闭 cmd 窗口。

谁能帮我弄清楚为什么从 .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(my name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 和然后尝试一下,没有任何反应。我猜这是因为 Windows 运行文件并在任何事情发生之前退出它,但我真的不确定。我真的需要一个解决方案,让它在启动时运行并接受我的按键输入,直到我关闭。

最佳答案

在你的 .cmd 文件中使用 windows 'start' 命令;删除“退出”。
像这样:

cd C:\Users\(my name)\Desktop
start pythonw File.pyw

关于python - 使用pyw文件的Windows启动不会关闭cmd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34540676/

相关文章:

java - 在 websphere 中启动应用程序时出现异常 java.lang.NoSuchMethodError : org/w3c/dom/Node. getTextContent()Ljava/lang/String

Apache Tomcat 启动错误 : SEVERE: Error deploying web application directory

python - try block 中变量的命名空间范围

python - 如何为 Tkinter 条目制作不可更改的默认文本?

python - 没有 np.nan 的标量和 pandas 系列的 np.maximum

c++ - 如何重载运算符 <<

python - 一种创建文件和目录而不覆盖的方法

windows - 使用 forfiles 删除文件夹及其内容

c++ - 如何改变窗口的音量?

iPhone 应用程序在某些设备(不是全部)上启动时崩溃