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