[英]Python subprocess stdout truncated by env variable $COLUMNS
我使用子進程在python(3.4.3)中調用bash腳本:
import subprocess as sp
res = sp.check_output("myscript", shell=True)
和myscript包含一行:
ps -ef | egrep somecommand
它沒有給出與在bash shell窗口中直接調用myscript時相同的結果。 經過多次修改后,我意識到當在python中調用myscript時,“ps -ef”的標准輸出被shell窗口的當前$ COLUMNS值截斷,然后被傳送到“egrep”。 對我來說,這很簡單,只需通過調整shell窗口大小,命令可以給出不同的結果!
我設法通過將env參數傳遞給子進程調用來“解決”問題,以指定足夠寬的COLUMNS:
res = sp.check_output("myscript", shell=True, env={'COLUMNS':'100'})
但是,這對我來說看起來很臟,我不明白為什么截斷只發生在python子進程中而不是在bash shell中。 坦率地說,我很驚訝這個行為沒有在官方python doc中記錄,除非它實際上是一個bug - 我使用的是python 3.4.3。 避免這種奇怪行為的正確方法是什么?
你應該使用-ww
,來自man ps
:
-w
寬輸出。 兩次使用此選項可獲得無限寬度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.