首页 > 解决方案 > 打印过程输出时多行

问题描述

我有以下 python3 代码来打印两个文件/目录的差异:

def out_diff(arg1, arg2):
    out = subprocess.Popen(['diff', '-r', arg1, arg2], 
               stdout=subprocess.PIPE, 
               stderr=subprocess.STDOUT)
    stdout, stderr = out.communicate()
    print(type(stdout))
    print(type(stderr))
    if len(stdout) != 0:
        print('stdout: ', arg1, arg2, stdout.decode()),  # error line
    if stderr is not None:
        print('stderr: ', arg1, arg2, stderr)
    print('end of function')

out_diff('output1', 'output2')

它的输出如下:

stdout:  output1 output2 diff: output1: No such file or directory
diff: output2: No such file or directory

end of function

我的问题是,无论我是否在标准输出打印行(用“#”标记)上放一个逗号,总是会打印一个空行。我不明白为什么会这样。基于尾随逗号的存在应该有所改变。

我的期望是,既然 a'\n'在标准输出字符串中,那么如果我没有放置尾随逗号,那么将打印 2 个空行。

标签: pythonpython-3.x

解决方案


在 Python 3 中,print是一个始终返回None. 通过在调用后添加逗号,您可以创建并立即丢弃元组(None,),而不仅仅是None. 这对您的代码没有任何影响,除了在不知不觉中减慢它的速度。

要抑制print通常附加到其输出的换行符,您需要传入关键字参数endend默认为\n. 改为''

print('stdout: ', arg1, arg2, stdout.decode(), end='')

正如您正确指出的那样,stdout.decode()很可能已经包含一个尾随换行符。


推荐阅读