2016-06-09 4 views
4

Если я пытаюсь запустить .ls в питона, не удивительно, я получаю SyntaxErrorКак Pyroot меняет интерпретатор python?

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

Но если я импортировать PyROOT, это как-то делает этот синтаксис правовой (и ведет себя, как это делает в ROOT, перечисляя содержимое поля текущий файл, в приведенном примере я не открывали)

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

Аналогично, .q работает, чтобы выйти из интерпретатора Python после того как я импортирован ROOT, как это происходит в обычном интерпретатором ROOT..

Как это работает?

ответ

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() 

, и если он не работает, он возобновляет нормальное обращение с вещами.