骚气的Python之捕获输出流

有时候我们的代码里可能要调用控制台命令,比如我想用Python写一个批量编译 .java 文件的脚本,用到如下代码

  1. 常规用法 os.system
    import os,traceback
    try:
        p = os.system("javac Test.java")
        print p
    except:
        print "\nexcept:\n"
        print traceback.format_exc()
    

    如然编译成功会返回一个0,如果错误会返回一个非0的值给p,这种方法可以知道执行结果,但是无法捕获比较重要的提示信息,例如:“错误: 找不到文件: Tst.java”。

    0
    错误: 找不到文件: Tst.java
    用法: javac <选项> <源文件>
    使用 --help 可列出可能的选项
    512

     

  2. 接下来我们用 commands.getstatusoutput 来捕获输出流
    import commands,traceback
    try:
        res = commands.getstatusoutput("javac Test.java")
        print res
        print res[1]
    except:
        print "\nexcept:\n"
        print traceback.format_exc()
    
    

    成功会返回一个tuple,例如(0, ' '),第一个元素表示状态,0代表成功,第二个是输出信息,如果错误则返回下面的结果

    (512, '\xe9\x94\x99\xe8\xaf\xaf: \xe6\x89\xbe\xe4\xb8\x8d\xe5\x88\xb0\xe6\x96\x87\xe4\xbb\xb6: Tst.java\n\xe7\x94\xa8\xe6\xb3\x95: javac <\xe9\x80\x89\xe9\xa1\xb9> <\xe6\xba\x90\xe6\x96\x87\xe4\xbb\xb6>\n\xe4\xbd\xbf\xe7\x94\xa8 --help \xe5\x8f\xaf\xe5\x88\x97\xe5\x87\xba\xe5\x8f\xaf\xe8\x83\xbd\xe7\x9a\x84\xe9\x80\x89\xe9\xa1\xb9')
    错误: 找不到文件: Tst.java
    用法: javac <选项> <源文件>
    使用 --help 可列出可能的选项

     

你可能感兴趣的:(python)