python - 如何传递文件中包含的命令行参数并保留该文件的名称?
问题描述
我有一个使用命令行参数的脚本,我想实现两个参数传递方案,即:
- 在命令行输入参数。
- 将参数列表存储在文件中,并通过命令行将该文件的名称传递给程序。
为此,我将参数传递fromfile_prefix_chars
给ArgumentParser
构造函数。
脚本.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
基于 - 的方法)来引出参数文件的名称?
解决方案
你的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')
推荐阅读
- javascript - 使用multer缺少流属性上传文件后端快递和前端反应
- c# - Object reference not set to an instance of an object when I try to bind a property of the item of a collection
- python - 如何查询 wkt 格式的几何对象内的所有点
- html - 没有反向匹配“模板渲染期间的错误”
- c# - 如何从表达式中获取返回的属性
> 参数 - wordpress - WordPress | 为活动流使用自定义帖子类型
- javascript - 无法将我的数据发送到我的条带创建结帐会话以获得我的客户付款的数量、价格和总额
- python - 如何让代码始终选择 JSON 文件中的最新文件,然后检索特定值
- python - 如何在 Docker 容器中运行 Windows 无头服务器?
- laravel - 方法 Illuminate\Auth\RequestGuard::onceUsingID 不存在 – Laravel Livewire