Python sys.argv and argparser conflict

huangapple go评论62阅读模式
英文:

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]}')

huangapple
  • 本文由 发表于 2023年3月9日 18:33:39
  • 转载请务必保留本文链接:https://go.coder-hub.com/75683386.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定