相关疑难解决方法(0)

哪个是允许在Python的命令行覆盖配置选项的最佳方法?

我有一个Python应用程序,需要很多(~30)配置参数.到目前为止,我使用OptionParser类在应用程序本身中定义默认值,可以在调用应用程序时在命令行中更改单个参数.

现在我想使用'正确'的配置文件,例如来自ConfigParser类.同时,用户仍应能够在命令行中更改单个参数.

我想知道是否有任何方法可以将这两个步骤结合起来,例如使用optparse(或更新的argparse)来处理命令行选项,但是在ConfigParse语法中从配置文件中读取默认值.

任何想法如何轻松地做到这一点?我真的不想手动调用ConfigParse,然后手动将所有optinos的所有默认值设置为适当的值...

python command-line configuration-files

68
推荐指数
4
解决办法
2万
查看次数

使用argparse时从环境变量设置选项

我有一个脚本,它具有某些选项,可以在命令行上传递,也可以从环境变量传递.如果两者都存在,则CLI应该优先,如果两者都没有,则会发生错误.

我可以检查解析后是否分配了该选项,但我更喜欢让argparse执行繁重的工作并负责在解析失败时显示用法语句.

我已经提出了几种替代方法(我将在下面作为答案发布,以便可以单独讨论),但他们觉得我很笨,我认为我错过了一些东西.

是否有一种被接受的"最佳"方式?

(编辑以在未设置CLI选项和环境变量时清除所需的行为)

python argparse

37
推荐指数
6
解决办法
2万
查看次数

从命令行获取参数,然后从文件获取参数,然后从默认值获取

我有一个python程序,它运行取决于一些参数.比方说,其中一个参数C的默认值为3.因此,当我在没有任何参数的情况下运行它时,它会

$ python parsing.py
C=3
Run Code Online (Sandbox Code Playgroud)

当我为初始数据加载文件时,它可以从该文件中获取一些参数值.例如,如果我的文件MakeC5说程序应该运行C=5,我会得到

$ python parsing.py --file=MakeC5
C=5
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我将C的不同值指定为可选参数,则采用该值,并且优先于文件中的值.

$ python parsing.py --C=4
C=4

$ python parsing.py --file=MakeC5 --C=4
C=4
Run Code Online (Sandbox Code Playgroud)

到这里,我可以检查命令行上指定的值是否与默认值不同,否则从文件中取出一个,如同

if parameters.C == parser.get_default('C'):
    parameters.C = load_file(parameters.file)["C"]
Run Code Online (Sandbox Code Playgroud)

但是,如果我在命令行中给出C的默认值,则此方法不起作用

$ python parsing.py --file=MakeC5 --C=3
C=3
Run Code Online (Sandbox Code Playgroud)

我该如何处理这个案子呢?有没有一种方法不需要像在中那样解析命令行两次

parameters = parser.parse_args()
parameters_from_file = load_file(parameters.file)
parser.set_defaults(**parameters_from_file)
parameters = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

对我来说这看起来不像"明显的pythonic方式"吗?这是准读取可以指定为参数的配置文件,所以我希望有一个好方法.

python argparse

0
推荐指数
1
解决办法
921
查看次数