python - 如何在不指定文件扩展名的情况下运行 python 脚本(跨平台解决方案)?

标签 python batch-file shell cmd wrapper

假设我们有一个 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/

相关文章:

python - 如何将 Django 应用程序部署到无法使用 pip 的服务器上

shell - 使用 Automator.app 逐行读取文本文件

java - 从android执行shell命令

python - 如何为每个 strip 使用不同的值初始化 numpy 2D 数组

python - 无法通过 tor ConnectionRefusedError : [WinError 10061] 发出 python 请求

batch-file - 如何在不扩展变量的情况下设置?

batch-file - 去掉 wmic 输出中的空格和制表符

batch-file - 批处理文件 - 忽略子批处理文件中的 CLS

Shell 脚本.....如果出错,请改为执行此操作

python - 为什么有些网站是 utf-8 有些不是 (python)