将配置从 .txt 文件传递到 argparse? (类似于 youtube-dl 的 `--config-location`)
Passing configs from `.txt` file into argparse? (Similar to youtube-dl's `--config-location`)
我有一个包含 ~20 个配置的程序,我想通过 argparse
从命令行访问它,可以是 --config_1 'This is the first config'
或 --config-location <path_to_config_file>
,其中配置文件的路径将是 .txt
形式:
--config_1 'This is the first config'
--config_2 '2nd Config'
--config_3 3
...
目前,我的代码类似于:
parser = argparse.ArgumentParser()
parser.add_argument('--config_1')
args = vars(parser.parse_args())
这种方法的灵感来自 youtube-dl
的 --config-location
。如果有更好的方法来完成我正在尝试做的事情,也欢迎提出建议。感谢阅读!
argparse
支持开箱即用的类似功能。
parser = ArgumentParser(fromfile_prefix_chars='@')
parser.parse_args()
现在任何以 @
开头的参数都将被视为要读取的文件名,每一行都被视为一个单独的参数。这需要您的文件看起来像
--config_1
This is the first config
--config_2
2nd Config
--config_3
3
...
相反。
What youtube-dl
does 只是打开文件,读取其内容,然后将其拆分为空格,类似于 shell 的方式。
有那么多命令行选项,更好的方法是制作一个配置文件。有两种方法可以做到这一点:
首先是创建一个单独的 Python 文件。创建一个名为 config.py
:
的文件
config_1 = 'This is the first config'
config_2 = '2nd config'
config_3 = 3
然后,在另一个文件中(比如,prog.py
):
import config
print(config.config_1)
print(config.config_2)
print(config.config_3)
这将输出:
This is the first config
2nd config
3
第二种方式是对上述方式的改进。您可以使用 ConfigParser。例如,以 config.ini
:
为例
[DEFAULT]
config_1 = 'This is the first config'
config_2 = '2nd config'
config_3 = 3
和一个例子prog.py
:
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
print(config['DEFAULT']['config_1'])
print(config['DEFAULT']['config_2'])
print(config['DEFAULT']['config_3'])
我们可以得到:
This is the first config
2nd config
3
请参阅 here 了解这两种方法之间的讨论。
我有一个包含 ~20 个配置的程序,我想通过 argparse
从命令行访问它,可以是 --config_1 'This is the first config'
或 --config-location <path_to_config_file>
,其中配置文件的路径将是 .txt
形式:
--config_1 'This is the first config'
--config_2 '2nd Config'
--config_3 3
...
目前,我的代码类似于:
parser = argparse.ArgumentParser()
parser.add_argument('--config_1')
args = vars(parser.parse_args())
这种方法的灵感来自 youtube-dl
的 --config-location
。如果有更好的方法来完成我正在尝试做的事情,也欢迎提出建议。感谢阅读!
argparse
支持开箱即用的类似功能。
parser = ArgumentParser(fromfile_prefix_chars='@')
parser.parse_args()
现在任何以 @
开头的参数都将被视为要读取的文件名,每一行都被视为一个单独的参数。这需要您的文件看起来像
--config_1
This is the first config
--config_2
2nd Config
--config_3
3
...
相反。
What youtube-dl
does 只是打开文件,读取其内容,然后将其拆分为空格,类似于 shell 的方式。
有那么多命令行选项,更好的方法是制作一个配置文件。有两种方法可以做到这一点:
首先是创建一个单独的 Python 文件。创建一个名为 config.py
:
config_1 = 'This is the first config'
config_2 = '2nd config'
config_3 = 3
然后,在另一个文件中(比如,prog.py
):
import config
print(config.config_1)
print(config.config_2)
print(config.config_3)
这将输出:
This is the first config
2nd config
3
第二种方式是对上述方式的改进。您可以使用 ConfigParser。例如,以 config.ini
:
[DEFAULT]
config_1 = 'This is the first config'
config_2 = '2nd config'
config_3 = 3
和一个例子prog.py
:
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
print(config['DEFAULT']['config_1'])
print(config['DEFAULT']['config_2'])
print(config['DEFAULT']['config_3'])
我们可以得到:
This is the first config
2nd config
3
请参阅 here 了解这两种方法之间的讨论。