我正在为另一个python函数编写一个Python包装器脚本,该函数使用optparse获取命令行选项,比如-p
和-i
。在我的包装函数中,我想添加一些未在外部函数中定义的其他命令行选项,例如: -x
。我正在寻找一种方法来将外部函数中定义的选项与我在包装器中定义的选项相结合。外部脚本具有如下函数:
def extparser():
from optparse import OptionParser
parser = OptionParser(
prog="external-prog",
usage="%prog [options]")
parser.add_option(
"-p", "--parameter", type="int", default=1,
help="algo parameter")
parser.add_option(
"-i", "--iterations", type="int",
help="number of iterations")
(opts, args) = parser.parse_args()
return opts
我无法更改外部功能中的代码。在我的包装脚本中,我有类似的东西:
#!/usr/bin/env python
from extprog import extparser
def newparser():
from optparse import OptionParser
parser = OptionParser(
prog="newprog",
usage="%prog [options]")
parser.add_option(
"-x", "--extraparam", type="int",
help="another parameter")
return parser.parse_args()
if __name__=="__main__":
extparser()
newparser()
现在,这当然没有按预期工作:
[myhost]>./sotest.py -x 1 -p 2 -i 3
Usage: external-prog [options] <action> <name>
external-prog: error: no such option: -x
有没有办法忽略外部程序的错误?外部程序中真正的选项列表很长,我想避免将其复制到包装器脚本中。
答案 0 :(得分:0)
在调用外部脚本optparse代码时,无法避免出现该错误。你可以做的是使用subprocess模块来控制你通过手动调用传递给外部脚本的变量。
E.g:
subprocess.call(["external-prog", "-p", "some p value", "-i", "10"])