PyROOT如何改变Python解释器?

4
如果我尝试在Python中运行.ls,毫不奇怪地,我会收到SyntaxError错误提示。
>>> .ls
  File "<stdin>", line 1
    .ls
    ^
SyntaxError: invalid syntax

但是,如果我导入PyROOT,它会让这个语法合法(并且像在ROOT中一样表现,列出当前文件的内容;在这个例子中,我还没有打开任何文件。)

>>> import ROOT
>>> .ls
>>>

同样地,当我导入ROOT时,.q命令可以像普通的ROOT解释器一样退出Python解释器。
这是如何实现的呢?
1个回答

4

该文件可以在lib/ROOT.py中找到。

如果不是使用ipython,就会重新定义sys.excepthook条件:

sys.excepthook = _excepthook

其中包含一些东西,例如:

### RINT command emulation     
------------------------------------------------------
def _excepthook( exctype, value, traceb ):
 # catch syntax errors only (they contain the full line)
   if isinstance( value, SyntaxError ) and value.text:
      cmd, arg = split( value.text[:-1] )

    # mimic ROOT/CINT commands
      if cmd == '.q':
         sys.exit( 0 )

or few lines bellow:

  elif cmd == '.ls':
     return sys.modules[ __name__ ].gDirectory.ls()

如果这些都不起作用,它将恢复正常的处理方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接