python 通過 subprocess 執行命令,重定向實時輸出


環境:python 3.6

 

下面的例子,通過 subprocess 執行命令,重定向並實時輸出,可修改重定向到文件或其他。

 

(注意:例子只適用於,遇到錯誤就停止執行的命令或腳本。)

 

一、執行 ping 命令 

import subprocess
import sys


# 常用編碼
GBK = 'gbk'
UTF8 = 'utf-8'

# 解碼方式,一般 py 文件執行為utf-8 ,cmd 命令為 gbk
current_encoding = GBK


popen = subprocess.Popen(['ping', 'www.baidu.com'],
                         stdout = subprocess.PIPE,
                         stderr = subprocess.PIPE,
                         bufsize=1)

# 重定向標准輸出
while popen.poll() is None:         # None表示正在執行中
    r = popen.stdout.readline().decode(current_encoding)
    sys.stdout.write(r)                    # 可修改輸出方式,比如控制台、文件等

# 重定向錯誤輸出
if popen.poll() != 0:                      # 不為0表示執行錯誤
    err = popen.stderr.read().decode(current_encoding)
    sys.stdout.write(err)                 # 可修改輸出方式,比如控制台、文件等

 

 

二、執行 .py文件

import subprocess
import sys


# 常用編碼
GBK = 'gbk'
UTF8 = 'utf-8'

# 解碼方式,一般 py 文件執行為utf-8 ,cmd 命令為 gbk
current_encoding = UTF8 


popen = subprocess.Popen(['python', r'D:\code\test.py'],  # 需要執行的文件路徑
                         stdout = subprocess.PIPE,
                         stderr = subprocess.PIPE,
                         bufsize=1)

# 重定向標准輸出
while popen.poll() is None:                      # None表示正在執行中
    r = popen.stdout.readline().decode(current_encoding)
    sys.stdout.write(r)                                # 可修改輸出方式,比如控制台、文件等

# 重定向錯誤輸出
if popen.poll() != 0:                                   # 不為0表示執行錯誤
    err = popen.stderr.read().decode(current_encoding)
    sys.stdout.write(err)                             # 可修改輸出方式,比如控制台、文件等

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM