簡體   English   中英

由subv變量$ COLUMNS截斷的Python子進程stdout

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM