Python optparse和参数中的空格

Gee*_*eeF 6 python optparse

当使用optparse我希望在一个选项后得到整个字符串,但我只能将它的一部分放到第一个空格.

例如:

python myprog.py --executable python someOtherProg.py
Run Code Online (Sandbox Code Playgroud)

我在'可执行'中得到的只是'python'.

是否可以使用optparse解析这些行,或者您是否必须使用argparse来执行此操作?

€:我已经尝试将其封装在"s中.但是在深入研究代码之后,我发现子进程调用无法处理参数.

带有命令行的字符串被塞入列表'args'.

args = [self.getExecutable()] + self.getArgs().split()
Run Code Online (Sandbox Code Playgroud)

就像是

"[python D:\\\workspace\\\myprog\\\src\\\myprog.py]"
Run Code Online (Sandbox Code Playgroud)

这给了我系统找不到文件异常.我用的时候

args[0]
Run Code Online (Sandbox Code Playgroud)

有用.但我放弃了可执行文件的参数.

如果第一个地方没有获得字符串,则子进程模块会从列表中构建cmdline,因此我暂时无法解释该行为.

Man*_*dan 12

您可以将它们括在引号中,以使它们与现有代码一起使用.

python myprog.py --executable "python someOtherProg.py"
Run Code Online (Sandbox Code Playgroud)

是否可以使用optparse解析这些行,或者您是否必须使用argparse来执行此操作?

我不知道是否/如何做到这一点,optparse因为我没有真正合作过optparse.

但是,我可以帮助你argparse.这是一个简单的例子:

#!/usr/bin/python
import argparse, sys

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description = 'Demonstration of Argparse.')
    parser.add_argument('-e', '--executable', nargs = '+', help = 'List of executables')
    args = parser.parse_args(sys.argv[1:])
    print args.executable
Run Code Online (Sandbox Code Playgroud)

用法:

manoj@maruti:~$ python myprog.py --executable python someOtherProg.py
['python', 'someOtherProg.py']
Run Code Online (Sandbox Code Playgroud)

我也建议切换optparseargparse.从2.7开始Optparse弃用.


sha*_*pan 6

我找到了另一个很好的选择shlex- 一个简单的类似shell语法的词法分析器类.

源链接:如何使用正则表达式解析命令行?

>>> import shlex
>>> shlex.split('"param 1" param2 "param 3"')
['param 1', 'param2', 'param 3']
>>> shlex.split('"param 1" param2 "param 3"')
Traceback (most recent call last):
    [...]
ValueError: No closing quotation
>>> shlex.split('"param 1" param2 "param 3\\""')
['param 1', 'param2', 'param 3"']
Run Code Online (Sandbox Code Playgroud)