如何将字符串转换为命令行参数向量?
How do I convert a string into a vector of command line arguments?
在python中,如何以与解析命令行参数字符串相同的方式解析字符串以构造sys.argv
?
我想做以下事情
首先:允许在我的 runnable.py
:
中将可选参数向量传递给 main
def main(argv=[]):
argv = argv or sys.argv[1:]
parser = argparse.ArgumentParser(...)
... more parser config ...
args = parser.parse_args(argv)
然后,在另一个模块中,我希望能够从 python:
中使用这个主要功能
argv = how_do_i_do_this('''-f text.txt -o -q "Multi word argument" arg2 "etc."''')
assert(argv == ['-f', 'text.txt', '-o', '-q', 'Multi word argument', 'arg2', 'etc.'])
runnable.main(argv)
使用shlex.split
:
>>> import shlex
>>> shlex.split('''-f text.txt -o -q "Multi word argument" arg2 "etc."''')
['-f', 'text.txt', '-o', '-q', 'Multi word argument', 'arg2', 'etc.']
此外,Python mutable defaults are the source of all evil。不要使用 argv=[]
作为 main
的默认参数,使用 argv=None
然后在 main
的主体中检查它的类型:
def main(argv=None):
if argv is None:
argv = sys.argv[1:]
# ...
在python中,如何以与解析命令行参数字符串相同的方式解析字符串以构造sys.argv
?
我想做以下事情
首先:允许在我的 runnable.py
:
main
def main(argv=[]):
argv = argv or sys.argv[1:]
parser = argparse.ArgumentParser(...)
... more parser config ...
args = parser.parse_args(argv)
然后,在另一个模块中,我希望能够从 python:
中使用这个主要功能argv = how_do_i_do_this('''-f text.txt -o -q "Multi word argument" arg2 "etc."''')
assert(argv == ['-f', 'text.txt', '-o', '-q', 'Multi word argument', 'arg2', 'etc.'])
runnable.main(argv)
使用shlex.split
:
>>> import shlex
>>> shlex.split('''-f text.txt -o -q "Multi word argument" arg2 "etc."''')
['-f', 'text.txt', '-o', '-q', 'Multi word argument', 'arg2', 'etc.']
此外,Python mutable defaults are the source of all evil。不要使用 argv=[]
作为 main
的默认参数,使用 argv=None
然后在 main
的主体中检查它的类型:
def main(argv=None):
if argv is None:
argv = sys.argv[1:]
# ...