使用subprocess執行命令列,管道阻塞

2021-09-10 21:29:40 字數 555 閱讀 4995

python中使用subprocess執行一系列cmd命令時,偶爾會出現阻塞情況,命令沒有繼續執行完畢。

原因:

#subprocess的pipe是有大小的。在python2.6.11之前,pipe的大小為檔案頁的大小(i386上是4096),

# 2.6.11之後變為65536.因此當輸出內容超過65536,會引起阻塞

解決:

1.使用臨時檔案tempfile擴充套件快取區;

2.去掉不必要輸出,以減少輸出量的大小

方案1,使用臨時檔案tempfile擴容快取:

out_temp = tempfile.spooledtemporaryfile(bufsize=10 * 1000)

fileno = out_temp.fileno()

process = subprocess.popen(cmd, stdout=fileno, stderr=fileno, shell=true) # stdout=subprocess.pipe,

方案2,視實際情況減少不必要資料。

使用subprocess模組非同步併發執行遠端命令

運維自動化平台不可避免地會涉及到遠端命令執行操作,主要分為兩類主要做法 目標機器安裝agent,或者使用ssh。saltstack是乙個典型的agent模式的遠端控制工具,麻煩的地方是首先要在目標機器上安裝saltstack的agent。使用ssh的模組居多,fabric和ansible是此類工具中...

subprocess 程序使用

同步程序 import subprocess cmd tail tmp test.log sp subprocess.popen cmd,stdout subprocess.pipe,stderr subprocess.pipe if sp.wait 0 print exec command suc...

subprocess 程序使用

同步程序 import subprocess cmd tail tmp test.log sp subprocess.popen cmd,stdout subprocess.pipe,stderr subprocess.pipe if sp.wait 0 print exec command suc...