告诉 python 解释器在脚本本身中使用解释器命令行开关

Posted

技术标签:

【中文标题】告诉 python 解释器在脚本本身中使用解释器命令行开关【英文标题】:Tell python interpreter to use a interpreter command-line switch in the script itself 【发布时间】:2017-04-12 21:40:18 【问题描述】:

是否可以使用特定的命令行开关告诉 python 解释器运行我的脚本。

例如,

如果我启用了 doctests,我想添加

if __name__ == '__main__':
    import doctest
    doctest.testmod()

创建一个独立的测试运行器。

但是,这需要我添加-v 开关来运行脚本:

python myscript -v

在像 Sublime 这样编译系统默认没有开关的编辑器中,这并不总是很方便。我知道我可以创建一个自定义构建器,但与指定用于某些脚本的开关相比,这不是最佳选择。

有可能吗?如果可以,怎么做?

更新

下面有人指出,doctest 案例涉及脚本标志而不是解释器开关。但我真的很想知道这两种情况。

虽然testmod(verbose=True) 可以解决这个特殊情况,但我仍然对原来的问题感兴趣。

【问题讨论】:

您使用的是 Windows 还是 Linux @chbchb55 macOS 注意:解释器本身的标志与脚本的标志不同。运行python myscript -v 会将-v 标志传递给脚本,而python -v myscript 将导致Python 将-v 解释为解释器本身的标志。 @user2357112 感谢您的提醒!我想知道这两种情况。所以我会修改我的问题。 你没有试过 import sys 然后 sys.argv 会在一个数组中包含你的 -v 输入 【参考方案1】:

verbose=True 传递给doctest.testmod

if __name__ == '__main__':
    import doctest
    doctest.testmod(verbose=True)

弄乱命令行标志是错误的方法。

【讨论】:

谢谢。如果我的标题问题无法实现,那么我会将您的问题标记为正确。【参考方案2】:

您可以考虑使用环境变量。 例如,

# from the command line
export VERBOSE_MODE=True

# in the Python code
import os
verbose_mode = os.environ.get('VERBOSE_MODE', False)

如果命令行上未提供标志,您可以将其作为后备机制。

【讨论】:

【参考方案3】:

我得到了我想要的。在带有 bash shell 的系统上,我可以简单地将以下内容添加到我的脚本顶部

#! /usr/local/bin/python3 -m doctest -v

然后

chmod +x myscript.py

不知道如何在 Windows 上做到这一点(可能等待 Win10 的 Linux 子系统),但幸运的是我主要在 macOS 上工作。

这也适用于其他命令行开关。

【讨论】:

以上是关于告诉 python 解释器在脚本本身中使用解释器命令行开关的主要内容,如果未能解决你的问题,请参考以下文章

在 bash 脚本中嵌入简短的 python 脚本

Shell变量

如何使用 Python 脚本退出 Linux 终端?

3Python脚本在linux环境下头文件解释

检索 Python 解释器的命令行参数

如何在 python 3 解释器中运行带有参数的 python 脚本?