2016-08-01 4 views
0

私はPyCharmパイプでPythonプログラムの出力を処理する方法が見つけられません。具体的には、私は私のプログラムからバニヤン(Node Bunyanから移植Python Bunyan)を使用しています、それはstderrにJSONログを生成します。PyCharmパイプpythonプログラムの出力を別のテキストプロセッサープログラムで行う方法

Pythonのコード:

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

生出力:処理さ

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} 

パイプ出力:

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" 
    ] 

出力がパイプされていますbunyanのコマンドラインツール(これは端末にも色がありますが、ここには表示されていません)に相当します。

WebStorm for jsでは、ローカルシェルスクリプトを 'Node interpreter'として追加することができますが、PyCharmの場合は、 'Run/Debug Configuration'ダイアログの 'Python interpreter'の 'Add'オプションはありません。私は 'Project Interpreter'としてシェルスクリプトを追加しようとすると、The selected file is not a valid home for PythonSDKと文句を言う。

希望の結果を得るために回避策を使用することができますか?

+0

あなただけの出力を着色する必要がある場合に、ソースコードは、[Grepのコンソール](と呼ばれるpycharmのための素晴らしいプラグインがある間https://plugins.jetbrains.com/プラグイン/ 7125?pr = pycharm)。 – zegkljan

+0

ありがとうございますが、色は私には二次的に重要なので、結果を対比するように例を更新しました。 jsonで構造化されたログデータを保持したまま、可読性が最も求められます。 –

答えて

0

アップデート:私は(私の意味での)より良い解決策で終わる :次にとして最初の本当のモジュール名を指定して、スクリプトとしてこのスタブを実行する

#!/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 

:のようなスタートアップのpythonスタブファイルrun-module.pyを作りますarg。

最後に、これを解決するためにIntelliJプラグインをDIYしました。 BunyanConsole Pretty Print GitHubのBunyanConsole

enter image description here

関連する問題