我使用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。避免这种奇怪行为的正确方法是什么?
答案 0 :(得分:3)
您应该使用-ww
中的man ps
:
-w
宽输出。使用此选项两次以获得无限宽度。