当使用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)
我也建议切换optparse到argparse.从2.7开始Optparse被弃用.
我找到了另一个很好的选择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)