python - 在 python 3 中传递系统属性的有效方法

标签 python python-2.7 python-3.x

我正在为一个应用程序使用 python 3。对于该实用程序,我需要按如下方式传递命令行参数,

python3 -m com.xxx.executor -Denvironment=dev -Dtoggle=False 

参数 environmenttoggle 也存在于属性文件中。如果该值是在命令行中指定的,它应该覆盖属性文件中存在的内容。

我基本上是一个 java 人,在 java 中,以 -Dkey=value 形式传递的属性将被设置为系统属性。然后可以从代码中读取这些属性,如 System.getProperty(key, defaultVal)

但是当我在 python 3 中尝试相同的方法时,它不起作用。

引用 python 文档后,在我看来 sys._xoptions 适合我的要求。

 python3 -Xenvironment=dev -Xtoggle=False -m com.xxx.executor

然后使用 sys._xoptions 读取属性

我正在使用 Cpython。该线程的目的是确保我进行的方式是否正确。或者在 python 中是否有任何其他更好的方法来实现相同的。

Python老手,请指导!

最佳答案

对于参数解析,我使用 argparse 模块 ( docs ) 来定义哪些是有效的命名和/或位置参数。

还有第三方模块,例如clickdocopt .你应该使用你觉得最舒服的,你是否可以使用第三方模块。单击文档包含它、argparse 和 docopt 之间的(可能有偏见的)比较。

我从未使用过sys._xoptions,也不知道它的存在。以 underscore 开头的函数似乎有点奇怪(通常用于表示“私有(private)”功能)在文档中提到。也许其他人可以阐明这一点。

对于属性文件的解析,我使用了 configparser 模块 ( docs )。当然,如果您愿意,可以选择 JSON 或 YAML 配置文件。

也就是说,当指定为参数时,您必须想出必要的代码来否决属性(尽管这应该不会太难)。

关于python - 在 python 3 中传递系统属性的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38540208/

相关文章:

python - 使用已安装的环境将 Keras 模型转换为 coreml 时出现问题

python - 获取选定的特征名称 TFIDF Vectorizer

python - 在 Python 中将数字四舍五入到 5 万

来自新手的 Web.Py 中的 Python 错误

python - 在 sympy 中调用 doit 方法后,Subs 对象仍然存在

python - 根据其他行中的值删除行

javascript - 使用 Python 从网站下载 Javascript 文件

python - 从 python 中的 pandas.DataFrame 中排除具有零值的行

python - Django 中的重定向

python - 当我运行Python程序时,pygame窗口打开片刻,然后退出