【问题标题】:Get Shell Output with python [duplicate]使用python获取Shell输出[重复]
【发布时间】:2016-04-26 19:06:50
【问题描述】:

$ jsonlint -cq /home/test/notokay1.json

上面的命令有退出值 1 和下面的输出

/home/notokay1.json:第 6 行,第 1 列,找到:'EOF' - 预期:'}'、','。

如何在 Python 中同时捕获两者。

【问题讨论】:

    标签: python linux shell operating-system subprocess


    【解决方案1】:

    使用subprocess.Popen:

    import subprocess
    
    p = subprocess.Popen('jsonlint -cq /home/test/notokay1.json'.split(),
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE)
    out, err = p.communicate()
    
    print "Standard Output:", out
    print "Standard Error Output:", err
    print "Return Code:", p.returncode
    

    【讨论】:

    • 我用的正是这个:)
    【解决方案2】:

    您可以使用subprocess 模块,更具体地说是check_output 方法。

    假设您有一个名为 test.bash 的文件,其内容如下:

    echo "Hi"
    exit 1
    

    要捕获退出代码和输出,您可以执行以下操作:

    # test.py file
    import subprocess
    
    exitCode = 0
    output = ""
    try:
        output = subprocess.check_output(["bash", "test.bash"]) # get only ouput
    except subprocess.CalledProcessError as e:
        # get output and exit code
        exitCode = e.returncode
        output = e.output
    
    print(output, exitCode)
    

    哪些输出:

    bash-4.2$ python test.py 
    ('Hi\n', 1)
    

    你只需要适应你的问题。

    【讨论】:

    • OP 很可能试图捕获标准错误,而不是标准输出。
    【解决方案3】:

    我相信这就是你要找的东西:

    $ jsonlint -cq /home/test/notokay1.json > stdout.txt; echo $? > stderr.txt
    

    然后您可以使用python's built in file I/O 读取stdout.txt 和stderr.txt

    参考:http://www.tldp.org/LDP/abs/html/io-redirection.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-17
      • 2014-04-18
      • 2021-05-08
      • 2015-04-07
      • 1970-01-01
      • 2013-08-21
      • 2018-03-18
      • 1970-01-01
      相关资源
      最近更新 更多