我试图通过命令行参数传递参数来追加一个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)
尝试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='?'对最后一个位置参数使用(或'*'或'+').它可以在早期使用它,但有一些复杂功能可以回馈你更多的问题.