首页 > 解决方案 > 如何传递文件中包含的命令行参数并保留该文件的名称?

问题描述

我有一个使用命令行参数的脚本,我想实现两个参数传递方案,即:

为此,我将参数传递fromfile_prefix_charsArgumentParser构造函数。

脚本.py

from argparse import ArgumentParser
parser = ArgumentParser(fromfile_prefix_chars='@')
parser.add_argument('filename', nargs='?')
parser.add_argument('--foo', nargs='?', default=1)
parser.add_argument('--bar', nargs='?', default=1)
args = parser.parse_args()
print(args)

参数.txt

--foo
2
--bar
2

示例用例

$ python script.py --foo 3
Namespace(bar=1, filename=None, foo='3')
$ python script.py @args.txt --foo 3
Namespace(bar='2', filename=None, foo='3')

我原以为这args.filename会保留文件的名称,但令人惊讶的是,它具有该值None。我知道我可以sys.argv通过一些处理来获取文件名。是否有一种更简洁的方法(最好是argparse基于 - 的方法)来引出参数文件的名称?

标签: pythonparameter-passingcommand-line-argumentsargparse

解决方案


你的script.py,加上文件。我已将文件名添加到文件本身。

参数.txt

args.txt
--foo
2
--bar
2

测试:

1803:~/mypy$ python3 stack56811067.py --foo 3
Namespace(bar=1, filename=None, foo='3')
1553:~/mypy$ python3 stack56811067.py @args.txt --foo 3
Namespace(bar='2', filename='args.txt', foo='3')

推荐阅读