2016-08-01 19 views
0

我发现没有办法让PyCharm管道处理我的Python程序的输出。具体来说,我使用从我的节目班扬(Python BunyanNode Bunyan移植),它生成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中,我可以添加一个本地shell脚本作为'节点解释器'来完成这项工作,但是对于PyCharm而言,'Run/Debug Configuration'对话框中的'Python解释器'没有'Add'选项,当我尝试将shell脚本添加为“Project Interpreter”时,它会投诉The selected file is not a valid home for PythonSDK

我想知道任何解决方法可以用来获得我想要的结果吗?

+0

如果您只是需要彩色输出的源代码,有一个很好的插件pycharm称为[grep的控制台(https://plugins.jetbrains.com/插件/ 7125?PR = pycharm)。 – zegkljan

+0

谢谢,但颜色对我来说是次要的,我更新了这个例子来对比结果。在json中保持日志数据的结构时,最需要可读性。 –

回答

0

更新: 我结束了一个更好的(在我的感觉)的解决方案:制作一个启动蟒蛇存根文件run-module.py像:

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

然后当第一次运行该存根作为脚本,与真正的模块名称ARG。

好的,最后我DIY了一个IntelliJ插件来解决这个问题。 BunyanConsole Pretty Print 而在GitHub上BunyanConsole

enter image description here

相关问题