由env变量$ COLUMNS

时间:2016-03-22 17:43:16

标签: python bash subprocess

我使用subprocess:

在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"的标准输出。在被传送到" egrep"之前,被shell窗口的当前$ COLUMNS值截断。对我来说,这很简单,只需通过调整shell窗口大小,命令可以给出不同的结果!

我成功地解决了#34;将 env 参数传递给子进程调用以指定足够宽的COLUMNS:

res = sp.check_output("myscript", shell=True, env={'COLUMNS':'100'})

然而,这对我来说看起来很脏,我不明白为什么截断只发生在python子进程中而不是在bash shell中。坦率地说,我很惊讶这个行为没有在官方python文档中记录,除非它实际上是一个bug - 我使用的是python 3.4.3。避免这种奇怪行为的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您应该使用-ww中的man ps

  

-w

     

宽输出。使用此选项两次以获得无限宽度。