Bash - stdout文本在重定向到文件时被截断

时间:2013-12-04 12:26:19

标签: python linux bash

在Linux上使用Bash(Ubuntu 12.04 LTS)时,文本输出有时会被截断。我会解释我的意思。

假设您发出“dpkg -l”命令。然后dpkg向其标准输出写入一长串已安装的包,文本行不会被截断,一切正常。现在,您尝试将命令的输出转储到文件 - “dpkg -l> dump”。查看文件内容时,您会看到某些行(那些很长的行)已被截断。什么逻辑导致这种行为?

另外,我进行了一个小实验。以交互方式使用Python解释器时,我输入以下内容:

from os import popen2

child_input, child_output = popen2("dpkg -l", "t")          # running the command "dpkg -l" in a subprocess so that I can then obtain what it writes to its stdout via a pipe

dump_file = open("dump", 'w')                               # create a file to write to

for string in child_output:                                 
    dump_file.write(string)                                 # writing the child's output to the dump file, one line at a time

dump_file.close()

以交互方式键入时,代码工作正常 - 不会发生截断。一旦我将该代码放在脚本中并运行它,一些长行就会被截断。为什么会这样?

1 个答案:

答案 0 :(得分:0)

您可以在执行bash;

中的命令之前尝试使用COLUMNS变量

感受到不同之处:

COLUMNS = 80 dpkg -l 和 COLUMNS = 300 dpkg -l <​​/ p>