PyROOT如何改变python解释器?

时间:2016-06-09 23:58:52

标签: python root-framework

如果我尝试在python中运行.ls,毫不奇怪我得到一个SyntaxError

>>> .ls
  File "<stdin>", line 1
    .ls
    ^
SyntaxError: invalid syntax

但是如果我导入PyROOT,它会以某种方式使这种语法合法(并且行为与ROOT中的行为一样,列出当前文件的内容;在此示例中我没有打开任何内容。)

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

类似地,.q在我导入ROOT后退出Python解释器,就像在普通的ROOT解释器中一样。

这是如何运作的?

1 个答案:

答案 0 :(得分: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 )

或以下几行:

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

如果没有这些工作,它将恢复正常的处理。