我喜欢在ipython笔记本中进行开发,但是当我想要编写一个读取命令行参数(例如,使用OptionParser )的主()函数时,我遇到了一个问题。我希望能够将代码导出到.py文件并从命令行运行它,但我还没有找到一种方法来让main()既可以在notebook中使用预定义参数运行,也可以使用python和命令行参数从命令行运行。秘诀是什么?
如果这一点不清楚,我想这样做:
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()发布于 2013-06-04 04:33:05
您不能确定您是在IPython笔记本、at控制台或简单的IPython shell中,原因很简单,这三个可以同时连接到相同的内核。
这就像在问,用户正在键入的当前键是什么颜色。你可以通过查看插入的usb设备,在互联网上查找图像并猜测键盘颜色来获得它,但没有什么能保证它会准确,也不能保证它不会改变,而且用户可以有多个键盘插入,甚至绘制键盘。
笔记本电脑也是如此,即使你确定你是在ZMQKernel中,你是在对着It控制台还是are服务器说话呢?同样,您发现您正在与were服务器对话,您是在与JS还是Emacs对话?以此类推。
你唯一能做的事情,你可以问用户。
可靠的是测试你是否在IPython中。
如果你真的但是想要一种方式,因为直到现在,notebook是唯一可以显示Javascript的东西。javascript可以在pyton中执行代码。因此,您可以能够创建一些显示JS的东西,这些JS将信息发送回内核。使用线程和计时器,你可以说你不在笔记本中(但你会有一个竞态条件)。
发布于 2013-06-04 05:28:23
不要担心它们之间的区别。只需设置默认值,除非从命令行覆盖它们,否则请使用这些默认值。
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']https://stackoverflow.com/questions/16904291
复制相似问题