繁体   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