如何将字符串转换为命令行参数向量?

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:]

# ...