从使用命令行选项解析的python脚本启动ipython shell

|| 我已经寻找了很长时间,找到了一种最佳方法来实现此目的,但是还没有成功。我的问题设置如下: 我希望能够以非编程方式从使用命令行选项解析(
optparse
)的python脚本中启动用于调试目的的ipython shell。 为了说明这个问题,下面有一些示例代码:
import sys
from optparse import OptionParser

class toolRunner(object):

    def __init__(self):
        self._parseOptions()

    def _parseOptions(self):
        usage = \"Usage: %prog [--help] [options] input.cmp.h5\" 
        parser = OptionParser(usage=usage)
        parser.add_option(\'-r\', type=\'string\', dest=\'ins\', default=\'1,2,3,4\')
        self.opts, args = parser.parse_args()

    def main(self):
        print testSum(self.opts.ins)

def testSum(dstr):
    from IPython.Shell import IPShellEmbed; IPShellEmbed()()
    return sum(map(int,dstr.strip().split(\',\')))

if __name__ == \'__main__\':
    sys.exit(toolRunner().main())
如果现在我按如下方式调用测试脚本“ 2”:
python test.py -r 1,2,3,4
我收到以下错误:
WARNING:
Error in Arguments: \"Ambiguous option \'-r\';  matches [\'readline\', \'readline_merge_completions\', \'readline_omit__names\', \'rcfile\']\"
我猜ipython试图将命令行选项
-r
解释为它的目标。如果我改为以编程方式调用
testSum(dstr)
函数,则不会产生此类错误,并且会弹出ipython shell。也就是说,如果我在上面的示例中替换以下代码:
if __name__ == \'__main__\':
    # sys.exit(toolRunner().main())
    testSum(\'1,2,3,4\')
并将我的脚本运行为:
python test.py -r 1,2,3,4
一切运行良好。 我已经研究了替代方法,例如使用ipdb(是否可以从代码进入ipython?),但由于我从ipython shell获得的功能丰富,并且因为它的功能丰富,因此更喜欢按照我在这里建议的方式进行操作很高兴知道为什么我的方式行不通。     
已邀请:
[重新发布作为答案,因为它起作用了] 尝试指定argv,如下所示:
IPShellEmbed(argv=[])()
。那应该阻止IPython查看您为脚本提供的参数。     

要回复问题请先登录注册