【发布时间】:2015-02-10 13:18:39
【问题描述】:
我想知道如何使用 python 的 argparse 模块从命令行和可能的文本文件中读取参数。我知道 argparse 的 fromfile_prefix_chars 但这并不是我想要的。我想要这种行为,但我不想要语法。我想要一个看起来像这样的界面:
$ python myprogram.py --foo 1 -A somefile.txt --bar 2
当 argparse 看到 -A 时,它应该停止从 sys.argv 或我给它的任何内容中读取,并调用我编写的函数来读取 somefile.text 并返回参数列表。当文件用完时,它应该继续解析 sys.argv 或其他什么。文件中参数的处理顺序是很重要的(即:-foo应该被处理,然后是文件中的参数,然后是-bar,这样文件中的参数可以覆盖--foo,并且-- bar 可能会覆盖文件中的内容)。
这样的事情可能吗?我可以编写一个自定义函数,将新参数推送到 argparse 的堆栈中,或者类似的东西吗?
【问题讨论】:
-
在您的版本中,什么会触发参数的特殊处理(而不是前缀字符)?
-
@martineau:“-A”选项表示“下一个参数是要读取的文件”。我需要能够编写自己的函数来读取该文件并返回参数(它不是每行一个参数的格式)
-
查看source of _parse_known_args,看起来 argparse 喜欢预先知道所有参数。如果您设置了@fromfile_prefix_chars,那么它会查看参数并构建一个全新的列表来解析(_read_args_from_files)。我认为您最好的选择是提前解析 sys.argv 以获取参数列表。
-
你如何告诉参数解析器你有一个应该以这种方式处理的参数?我在想也许你可以继承
argparse.ArgumentParser。 -
@mgilson:我从来没有说过我认为这是不合理的......只是想了解 OP 的想法。
标签: python python-2.7 argparse