python - 打印过程输出时多行
问题描述
我有以下 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 个空行。
解决方案
在 Python 3 中,print
是一个始终返回None
. 通过在调用后添加逗号,您可以创建并立即丢弃元组(None,)
,而不仅仅是None
. 这对您的代码没有任何影响,除了在不知不觉中减慢它的速度。
要抑制print
通常附加到其输出的换行符,您需要传入关键字参数end
。end
默认为\n
. 改为''
:
print('stdout: ', arg1, arg2, stdout.decode(), end='')
正如您正确指出的那样,stdout.decode()
很可能已经包含一个尾随换行符。
推荐阅读
- fedora - libncurses.so.5 - 无法打开共享库,Fedora
- java - 如何从数组的所有元素中减去一个常数值?
- vba - 通过命令 VBA.Userform.Add("UF") 加载用户表单时重新初始化
- circuit - 如何在电路会议中激活或停用我自己的麦克风?
- sql-server - MDX 组合查询
- ruby-on-rails - 想在微博中添加关注者,错误:“缺少参数微博”
- .net-core - Entity Framework Core 无法使用子对象和 GUID 创建种子
- javascript - fitBounds doesn't work without a timer
- qt - CMake 在 Docker / Ubuntu 18.04 中找不到 Qt5LinguistTools
- cmake - 为什么CPack会生成一个空包?