我正在为一个应用程序使用 python 3。对于该实用程序,我需要按如下方式传递命令行参数,
python3 -m com.xxx.executor -Denvironment=dev -Dtoggle=False
参数 environment
和 toggle
也存在于属性文件中。如果该值是在命令行中指定的,它应该覆盖属性文件中存在的内容。
我基本上是一个 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 ) 来定义哪些是有效的命名和/或位置参数。
还有第三方模块,例如click和 docopt .你应该使用你觉得最舒服的,你是否可以使用第三方模块。单击文档包含它、argparse 和 docopt 之间的(可能有偏见的)比较。
我从未使用过sys._xoptions
,也不知道它的存在。以 underscore 开头的函数似乎有点奇怪(通常用于表示“私有(private)”功能)在文档中提到。也许其他人可以阐明这一点。
对于属性文件的解析,我使用了 configparser
模块 ( docs )。当然,如果您愿意,可以选择 JSON 或 YAML 配置文件。
也就是说,当指定为参数时,您必须想出必要的代码来否决属性(尽管这应该不会太难)。
关于python - 在 python 3 中传递系统属性的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38540208/