在python3中使用subprocess的check_out方法時,因為該輸出為byte類型,所以如果要查看具體的內容時需要進行轉碼,如果轉碼不對話,會影響內容輸出的可讀性,如下:
#1,輸出解碼不帶參數
1 # -*- coding:utf-8 -*- 2 3 import subprocess 4 cmd = r"ping www.baidu.com" 5 result = subprocess.check_output(cmd) 6 print(result.decode()) # decode中不帶參數,默認是以utf-8解碼 7 8 9 輸出報錯: 10 Traceback (most recent call last): 11 File "E:/debug.py", line 12, in <module> 12 print(result.decode()) # decode中不帶參數 13 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 2: invalid continuation byte 14 15 Process finished with exit code 1
#2,輸出解碼帶上 unicode_escape 參數,會顯示亂碼
1 # -*- coding:utf-8 -*- 2 3 import subprocess 4 cmd = r"ping www.baidu.com" 5 result = subprocess.check_output(cmd) 6 print(result.decode("unicode_escape")) # decode中帶參數 unicode_escape 7 8 9 輸出顯示亂碼如下: 10 ÕýÔÚ Ping www.a.shifen.com [14.215.177.39] ¾ßÓÐ 32 ×Ö½ÚµÄÊý¾Ý: 11 À´×Ô 14.215.177.39 µÄ»Ø¸´: ×Ö½Ú=32 ʱ¼ä=6ms TTL=47 12 À´×Ô 14.215.177.39 µÄ»Ø¸´: ×Ö½Ú=32 ʱ¼ä=6ms TTL=47 13 À´×Ô 14.215.177.39 µÄ»Ø¸´: ×Ö½Ú=32 ʱ¼ä=6ms TTL=47 14 À´×Ô 14.215.177.39 µÄ»Ø¸´: ×Ö½Ú=32 ʱ¼ä=6ms TTL=47 15 16 14.215.177.39 µÄ Ping ͳ¼ÆÐÅÏ¢: 17 Êý¾Ý°ü: ÒÑ·¢ËÍ = 4£¬ÒѽÓÊÕ = 4£¬¶ªÊ§ = 0 (0% ¶ªÊ§)£¬ 18 Íù·µÐг̵ĹÀ¼ÆÊ±¼ä(ÒÔºÁÃëΪµ¥Î»): 19 ×î¶Ì = 6ms£¬× = 6ms£¬Æ½¾ù = 6ms 20 21 22 Process finished with exit code 0
#3、輸出解碼帶上 gbk 參數,顯示正常
1 # -*- coding:utf-8 -*- 2 3 import subprocess 4 cmd = r"ping www.baidu.com" 5 result = subprocess.check_output(cmd) 6 print(result.decode("gbk")) # decode中帶參數 gbk 7 8 9 輸出顯示正常如下: 10 正在 Ping www.a.shifen.com [14.215.177.39] 具有 32 字節的數據: 11 來自 14.215.177.39 的回復: 字節=32 時間=7ms TTL=47 12 來自 14.215.177.39 的回復: 字節=32 時間=6ms TTL=47 13 來自 14.215.177.39 的回復: 字節=32 時間=7ms TTL=47 14 來自 14.215.177.39 的回復: 字節=32 時間=7ms TTL=47 15 16 14.215.177.39 的 Ping 統計信息: 17 數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失), 18 往返行程的估計時間(以毫秒為單位): 19 最短 = 6ms,最長 = 7ms,平均 = 6ms 20 21 22 Process finished with exit code 0