2016-06-09 3 views
4

Wenn ich versuche .ls in Python zu laufen, nicht überraschend ich einen SyntaxWie ändert PyROOT den Python-Interpreter?

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

bekommen, aber wenn ich PyROOT importieren, macht es irgendwie diese Syntax legal (und verhält sich, wie es in ROOT der Fall ist, die Auflistung der Inhalte der aktuelle Datei, im Beispiel hier eröffnen ich nicht)

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

ähnlich .q arbeitet das Python-Interpreter zu beenden, nachdem ich ROOT importiert habe, wie es in dem normalen ROOT-Interpreter tut..

Wie funktioniert das?

Antwort

4

Es kann in lib von/ROOT.py

ist es, dass diese Bedingung, wenn nicht IPython die sys.excepthook neu definiert:

sys.excepthook = _excepthook 

die wiederum enthält Sachen wie:

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

oder einige Zeilen unten:

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

und wenn nichts davon funktioniert, wird der normale Umgang mit den Dingen fortgesetzt.

Verwandte Themen