如果我尝试在python中运行.ls
,毫不奇怪我得到一个SyntaxError
>>> .ls
File "<stdin>", line 1
.ls
^
SyntaxError: invalid syntax
但是如果我导入PyROOT,它会以某种方式使这种语法合法(并且行为与ROOT中的行为一样,列出当前文件的内容;在此示例中我没有打开任何内容。)
>>> import ROOT
>>> .ls
>>>
类似地,.q
在我导入ROOT后退出Python解释器,就像在普通的ROOT解释器中一样。
这是如何运作的?
答案 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()
如果没有这些工作,它将恢复正常的处理。