有時候我們的代碼里可能要調用控制臺命令,比如我想用Python寫一個批量編譯 .java 文件的腳本,用到如下代碼
常規用法 os.system
1
2
3
4
5
6
7
|
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”。
1
|
0 |
1
2
3
4
|
錯誤: 找不到文件: Tst.java 用法: javac <選項> <源文件> 使用 - - help 可列出可能的選項 512 |
接下來我們用 commands.getstatusoutput 來捕獲輸出流
1
2
3
4
5
6
7
8
|
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代表成功,第二個是輸出信息,如果錯誤則返回下面的結果
1
2
3
4
|
( 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捕獲控制臺輸出流的方法詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/seTaire/article/details/83690321