我正在使用subprocess.popen来运行命令并获取stdout。
恰好,程序(mplayer)使用eol类型\n
和\r
。 \r
来自终端控制字符。因此,我最终得到的输出是规则线,其中散布着很长的行,其中\r
被忽略。
我知道如果我自己打开了一个文件,我可以设置换行符类型。但是,我从popen那里得到了stdout所以我无法控制它。
我看了一下python 2.7源码和我的图像我可以某种方式使用TextIOWrapper来尊重两种eol类型。但是我不太确定我需要传递给它。我知道我需要传递构造函数某种缓冲区,但我不知道如何从已经打开的文件中获取缓冲区。
总而言之,如果给定已打开的文件/流,我在readline()
和\n
中的\r
怎么办?
答案 0 :(得分:2)
Popen.subprocess(如果方便功能对您来说是Popen.check_output),请设置universal_newlines
参数,默认情况下为False
,但设置为{{1将为您提供将所有换行变体转换为True
所需的行为。