我在互联网上的任何地方都找不到真正的非脚本特定,双击并且窗口不会关闭解决方案。我想我懒得在不需要的时候拖放或输入,所以经过一些实验后,我想出了一个解决方案。
基本思想是重新关联 .py 文件,以便它们在运行预期脚本之前运行单独的初始脚本。初始脚本使用 /k 参数启动一个新的命令提示符窗口,该参数在完成后保持命令提示符打开并在新窗口中运行您想要的脚本。
也许有充分的理由不这样做,如果有更多知识,请发表评论,但我认为如果遇到任何问题,如果需要,很容易恢复。一个可能不受欢迎的副作用是拖放或键入并从命令提示符运行现在会打开第二个命令提示符,而不是在您拖放或键入的命令提示符中运行。
现在,为了实现,我将初始 python 脚本称为 python_cmd_k.pyw。我正在使用 Python 3.7。其他版本所需的代码可能有所不同。将路径 C:\Python37\python.exe 更改为 python 安装的位置。如果 .pyw 文件还没有,则通过 Windows 将它们关联到 pythonw.exe(不是 python.exe)。
import subprocess
import sys
#Run a python script in a new command prompt that does not close
command = 'start cmd /k C:\Python37\python.exe "' + sys.argv[1] + '"'
subprocess.run(command, shell=True)
每次双击任何 .py 脚本时都会运行它,并启动一个新的命令提示符来运行您双击的脚本。当这个初始脚本运行时,通过 pythonw.exe 运行会抑制命令提示符窗口。否则,如果您通过 python.exe 运行它,由于第一个窗口每次都会短暂显示,因此会出现令人讨厌的命令提示符闪烁。显示预期的脚本是因为上面初始脚本中的代码使用 python.exe 运行预期的脚本。
现在通过 Windows 将 .py 文件与 python.exe(不是 pythonw.exe)关联,如果它们还没有,并编辑此关联的注册表项(免责声明:如果您不确定自己在做什么,请务必在编辑之前备份您的注册表)。我不知道注册表中是否有不同路径用于不同版本的 Windows 的文件关联,但对我来说它位于:
HKEY_CURRENT_USER\Software\Classes\Applications\python.exe\shell\open\command
将数据更改为 pythonw.exe 路径(不是 python.exe)并将路径添加到上面的 ptyhon 脚本和“%1”作为参数(“%1”传递双击文件的完整路径)。例如,如果 pythonw.exe 和 python_cmd_k.pyw 位于 C:\Python37\ 那么:
"C:\Python37\pythonw.exe" "C:\Python37\python_cmd_k.pyw" "%1"
只要您为两者提供正确的路径,就不必将 python_cmd_k.pyw 与 pythonw.exe 放在同一目录中。您可以将它们放在 .reg 文件中,以便在使用脚本和默认行为之间轻松切换。在下面的示例中根据需要更改路径(注册表中的位置、python 的安装、放置 python_cmd_k.pyw 脚本的位置)。
使用 ptyhon_cmd_k.pyw (根据需要更改路径):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\Applications\python.exe\shell\open\command]
@="\"C:\\Python37\\pythonw.exe\" \"C:\\Python37\\python_cmd_k.pyw\" \"%1\""
默认版本(根据需要更改路径):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\Applications\python.exe\shell\open\command]
@="\"C:\\Python37\\python.exe\" \"%1\""