英文:
Python sys.argv and argparser conflict
问题
以下是您提供的代码部分的翻译:
import argparse
import sys
# 定义一个 argparse 解析器
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo 帮助')
# 使用 argparse 解析参数
args = parser.parse_args()
# 访问来自 argparse 的 --foo 值
if args.foo:
print(f'--foo 设置为 {args.foo}')
# 访问 sys.argv 的值
if len(sys.argv) > 1:
print(f'第一个位置参数是 {sys.argv[1]}')
我的运行结果:
# 这个是成功的!
python foo.py "asdasd"
用法:foo.py [-h] [--foo FOO]
foo.py: 错误: 无法识别的参数: asdasd
# 这个是失败的!
python foo.py --foo "asdasd"
--foo 设置为 asdasd
第一个位置参数是 --foo
英文:
I'm trying to mixed-use both argument handlers but failed. Python doesn't allow me to do so or do there exist some ways to handle mixed usage?
import argparse
import sys
# Define an argparse parser
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help')
# Parse the arguments using argparse
args = parser.parse_args()
# Access the value of --foo from argparse
if args.foo:
print(f'--foo is set to {args.foo}')
# Access the value of sys.argv
if len(sys.argv) > 1:
print(f'The first positional argument is {sys.argv[1]}')
my running result:
# this one ok!
python foo.py "asdasd"
usage: foo.py [-h] [--foo FOO]
foo.py: error: unrecognized arguments: asdasd
# this one fail!
python foo.py --foo "asdasd"
--foo is set to asdasd
The first positional argument is --foo
答案1
得分: 1
你可以同时使用它们。argparse 是一个以用户友好的方式处理命令行参数的模块。sys.argv 是一个包含你的命令行参数的列表。
# 使用 argparse 解析参数
args, remaining_args = parser.parse_known_args()
# 访问 sys.argv 的值
if len(sys.argv) > 1 and sys.argv[1] not in remaining_args:
print(f'第一个位置参数是 {sys.argv[1]}')
英文:
You can use both of them. argparse is a module to handle CLA in a user friendly way. sys.argv is a list that contains your CLA.
# Parse the arguments using argparse
args, remaining_args = parser.parse_known_args()
# Access the value of sys.argv
if len(sys.argv) > 1 and sys.argv[1] not in remaining_args:
print(f'The first positional argument is {sys.argv[1]}')
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论