如何使用Python的argparse与预定义的参数字符串?
我想用Python的argparse模块来解析我的命令行参数字符串。这个方法在从终端传递参数时能正常工作,但如果是给定的字符串就不行了。
import argparse
parser = argparse.ArgumentParser(description='Argparse Test script')
parser.add_argument("param", help='some parameter')
argString = 'someTestFile'
print(argString)
args = parser.parse_args(argString)
当我运行这个脚本时,输出是这样的:
~/someTestFile
usage: argparsetest.py [-h] param
argparsetest.py: error: unrecognized arguments: o m e T e s t F i l e
这里的~/someTestFile
somehow被变成了o m e T e s t F i l e
。正如之前提到的,如果我从终端传递文件名,这个方法是有效的。
我想这可能和字符串的编码有关。有没有人知道怎么解决这个问题?
4 个回答
7
就像默认的 sys.argv
是一个列表一样,你的参数也必须是一个列表。
args = parser.parse_args([argString])
58
另一个选择是使用 shlex.split。如果你有真实的命令行参数字符串,这个方法特别方便:
import shlex
argString = '-vvvv -c "yes" --foo bar --some_flag'
args = parser.parse_args(shlex.split(argString))
34
parser.parse_args()
这个函数需要接收一个和 sys.argv[1:]
一样格式的序列。如果你把一个字符串当成 sys.argv
的序列来处理,你会得到 ['s', 'o', 'm', 'e', 'T', 'e', 's', 't', 'F', 'i', 'l', 'e']
这样的结果。这里的 's' 被当作了一个有效的参数,而字符串的其他部分就无法解析了。
所以,正确的做法是传入 parser.parse_args(['someTestFile'])
这样的格式。