ipython笔记本中的OptionParser?

时间:2013-06-03 19:23:49

标签: ipython-notebook

我喜欢在ipython笔记本内部开发,但是当我想编写一个读取命令行args的main()函数时(例如,使用OptionParser),我遇到了问题。我希望能够将代码导出到.py文件并从命令行运行它,但我还没有找到一种方法可以在具有预定义参数的笔记本中运行main()或从命令行运行用python和命令行args。秘密是什么?

如果不清楚,我想做这样的事情:

if __name__ == '__main__':
    # if in the notebook
    vals = {'debug':True, 'tag_file': 't.tags'}
    options = Object()
    for k,v in vals.items():
        options.setattr(k,v)
    args = 'fname1.txt'
    # if running as a command line python script
    from optparse import OptionParser
    parser = OptionParser()
    parser.add_option('-d','--debug',action='store_true',dest='debug')
    parser.add_option('-t','--tags',action='store',dest='tag_file')
    options,args = parser.parse_args()

2 个答案:

答案 0 :(得分:1)

您不能确定您是在IPython笔记本或qtconsole或简单的IPython shell中,原因很简单,3可以同时连接到同一个内核。

这就像问,用户键入的当前键是什么颜色。您可以通过查看插入的USB设备并在互联网上查找图像并猜测键盘颜色来获得它,但没有什么能保证它是准确的,也不会保证它不会改变,并且用户可以插入多个键盘,甚至画键盘。

笔记本真的一样,即使你确定你在ZMQKernel,你是在为qtconsole还是webserver服务?再次,您发现您正在与网络服务器交谈,您是在与JS还是Emacs交谈?依此类推。

你唯一能做的就是问问用户。

什么是可靠的,是你在IPython中测试的。


如果真的 reeaaalllyy 想要一种方法,那么直到现在,笔记本是唯一可以显示Javascript的东西。并且javascript可以在pyton中执行代码。所以你可能能够创建显示JS的东西,将信息发送回内核。使用线程和计时器,你可以说你不在笔记本中(但你会遇到竞争条件)。

答案 1 :(得分:0)

不要担心这种区别。只需设置默认值,除非从命令行覆盖它们,否则请使用它们。

if __name__ == '__main__':

    parser = OptionParser()
    parser.add_option('-d', '--debug', action='store_true', dest='debug',
                      default=True)
    parser.add_option('-t','--tags',action='store',dest='tag_file',
                      default='t.tags')
    options, args = parser.parse_args()
    if not args:
        args = ['fname1.txt']