在python中传递可选参数

csv*_*svb 2 python argparse

我试图通过命令行参数传递参数来追加一个url.以下是我的尝试方式:

import argparse
parser = argparse.ArgumentParser(description='Arguments')
parser.add_argument('input', metavar='input', type=str)
parser.add_argument('output', metavar='text', type=str)
args = parser.parse_args()
url = 'https://example.com/?z=12&text='+args.output+'&loc{}'
print url
Run Code Online (Sandbox Code Playgroud)

当我执行

python url.py text.csv hello
Run Code Online (Sandbox Code Playgroud)

它将第二个传递的参数附加到url.我想知道如何使第二个参数可选,这样即使不提供第二个参数,我也希望通过连接到url来打印url.这是我期待的输出:

当两个论点都给出:

python url.py text.csv hello
Run Code Online (Sandbox Code Playgroud)

输出应该是

https://example.com/?z=12&text=hello&loc{}
Run Code Online (Sandbox Code Playgroud)

当给出单个参数时

python url.py text.csv
Run Code Online (Sandbox Code Playgroud)

输出应该是

https://example.com/?z=12&text=&loc{}
Run Code Online (Sandbox Code Playgroud)

hpa*_*ulj 5

尝试nargs='?'并定义一个default:

import argparse
parser = argparse.ArgumentParser(description='Arguments')
parser.add_argument('input', metavar='input')
parser.add_argument('output', metavar='text', nargs='?', default='')
args = parser.parse_args()
url = 'https://example.com/?z=12&text='+args.output+'&loc{}'
print url
Run Code Online (Sandbox Code Playgroud)

当我用一个命令行字符串测试它时,args.output是默认值:

In [91]: args = parser.parse_args(['one'])

In [92]: args
Out[92]: Namespace(input='one', output='')

In [93]: args = parser.parse_args(['one','two'])

In [94]: args
Out[94]: Namespace(input='one', output='two')
Run Code Online (Sandbox Code Playgroud)

最好只nargs='?'对最后一个位置参数使用(或'*'或'+').它可以在早期使用它,但有一些复杂功能可以回馈你更多的问题.