2016-08-01 8 views
0

Ich finde keine Möglichkeit, dass PyCharm-Pipe die Ausgabe meines Python-Programms verarbeitet. Insbesondere verwende ich bunyan (Python Bunyan von Node Bunyan portiert) von meinem Programm, generiert es JSON Protokoll stderr:Wie man die Ausgabe des PyCharm-Pipe-Python-Programms durch ein anderes Textverarbeitungsprogramm macht

Python-Code:

logger.info({'nick': 'Duke', 'age': 30, 'expertise': ['Java', 'Javascript', 'Python']}, 
      'Hi %(nick)s, your expertise recorded!'); 

Raw Ausgabe:

cymp:scratches cyue$ python logging-wander.py 
{"name": "__main__", "expertise": ["Java", "Javascript", "Python"], "nick": "Duke", "age": 30, "time": "2016-08-02T18:16:12Z", "msg": "Hi Duke, your expertise recorded!", "hostname": "cymp.local", "level": 30, "pid": 1418, "v": 0} 

Rohr verarbeitet Ausgabe:

cymp:scratches cyue$ python logging-wander.py 2>&1 | bunyan 
[2016-08-02T18:16:15Z] INFO: __main__/1419 on cymp.local: Hi Duke, your expertise recorded! (nick=Duke, age=30) 
    expertise: [ 
     "Java", 
     "Javascript", 
     "Python" 
    ] 

Der Ausgang ist piped zu Bunyans Befehlszeilentool für hübschen Druck (es gibt sogar Farben in den Terminals, aber nicht gezeigt hier).

In WebStorm für js kann ich ein lokales Shell-Skript als 'Node-Interpreter' hinzufügen, aber für PyCharm gibt es keine Option 'Hinzufügen' für 'Python-Interpreter' im Dialog 'Ausführen/Debug-Konfiguration' , und es klagt The selected file is not a valid home for PythonSDK, wenn ich versuche, das Shell-Skript als "Projekt-Interpreter" hinzuzufügen.

Ich frage mich, jede Problemumgehung kann verwendet werden, um mein gewünschtes Ergebnis zu haben?

+0

Wenn Sie nur die Ausgabefarbe müssen, gibt es eine schöne Plugin für PyCharm [Grep Konsole] genannt ist (https://plugins.jetbrains.com/ plugin/7125? pr = pycharm). – zegkljan

+0

Danke, aber die Farbe ist für mich zweitrangig, ich habe das Beispiel aktualisiert, um das Ergebnis zu kontrastieren. Lesbarkeit ist am wichtigsten, während die Protokolldaten so strukturiert bleiben wie in json. –

Antwort

0

Update: ich mit einer besseren (in meinem Sinne) Lösung am Ende:

#!/usr/bin/env python 

import os 
import sys 
import subprocess 
import runpy 

real_stderr = sys.stderr 

if len(sys.argv) < 2: 
    raise Exception('module name is required') 

try: 
    bi, bo = os.pipe() 
    sys.stderr = os.fdopen(bo, 'w') 
    subprocess.Popen(['bunyan', '--color'], stdin=bi, stderr=real_stderr) 

    modu_name = sys.argv[1] 
    sys.argv = sys.argv[1:] # shift off run-module.py, argv[0] will be replaced by module's __main__ 
    runpy.run_module(modu_name, alter_sys=True) 
except NameError: 
    print('sys.path => %r' % sys.path, file=real_stderr) 
    raise 
except: 
    import traceback 

    traceback.print_exc(file=real_stderr) 
    raise 

Dann läuft diese Stummel als das Skript, mit echten Modulnamen als ersten: einen Start Python Stubdatei run-module.py wie Handwerk arg.

Okay, endlich baue ich ein IntelliJ-Plugin, um das zu lösen. BunyanConsole Pretty Print während Quellcode auf GitHub BunyanConsole

enter image description here

Verwandte Themen