假设我们有一个 Python 脚本 do.py
并且我们希望能够在没有扩展名的情况下调用它,例如 do
或 ./do
。
如果我们将文件从 do.py
重命名为 do
并确保我们有一个有效的 shebang 行,它将适用于除 Windows 以外的所有平台。在 Windows 上无法执行没有扩展名的文件。
在 Windows 上,如果我们保留原始文件扩展名,我们将能够在没有全名的情况下调用脚本,因为 Python 安装程序将 .py
扩展名注册为可执行文件。
看起来我们需要以两个不同的名称交付相同的脚本,以便在 Windows 和非 Windows 环境中调用它。我真的不喜欢这样,我正在寻找没有这种冗余的解决方案。
另一种常见的方法是添加一个 do.cmd
包装器批处理文件,该文件调用原始 do.py
文件。这至少有一个主要问题:它确实破坏了 Ctrl+C/Ctrl+Break,因为没有办法阻止 cmd.exe
提示您 Terminate batch job? (Y/N) message.
如果我们要使用包装器,我们需要确保:
- 返回原脚本返回的errorcode(errorlevel)
- 不会改变环境
- 它将重用同一个控制台(没有新窗口)
- 不干扰 STDOUT、STDIN 或 STDERR
- 友好地使用 Ctrl-C(无提示)
我想最佳解决方案仍然是使用包装器。批处理不起作用, native 可执行文件会增加很多复杂性,因此用 python 本身编写的包装器可能会起作用。
最佳答案
在 Windows 上,我向“PATHEXT”环境变量添加了“.py”扩展名,这对我有用——如果 .py 文件存储在属于“PATH”环境变量的目录中。
C:\>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.PY;.JS;.JSE
关于python - 如何在不指定文件扩展名的情况下运行 python 脚本(跨平台解决方案)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2347042/