1

我正在尝试在调用的命令的输出之间进行比较subprocess.check_output()。因为我在 Windows 上运行它,所以我也在\r\n输出中得到 's(这是一件好事)。

现在我想将该命令的输出与文本文件进行比较。这失败了,因为open()不保留\r's。这是我到目前为止得到的:

try:
    output = subprocess.check_output(paramList, universal_newlines=False,
                                     stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as err:
    output = err.output
    errorCode = err.returncode

with open(EMCMD_INCORRECT_PARAMS, 'r') as fd_usage:
    usageLines = fd_usage.read()
    usage = True if usageLines == output else False

有什么建议可以保留\r's?谢谢!

4

1 回答 1

0

在 python 3 中, open 需要一个newlines参数来控制换行翻译器的行为(参见文档)。此参数的值''禁用换行转换。


如果您不能使用 python 3,则打开的文件对象open具有newline包含原始换行符类型的属性,因此您可以使用它来获取原始内容:

with open(EMCMD_INCORRECT_PARAMS, 'r') as fd_usage:
    usageLines = fd_usage.read().replace('\n', fd_usage.newline)

如果您不喜欢对read返回的内容进行后处理以获取文件的原始内容,那么二进制模式也可能是一种解决方案。

于 2012-10-31T15:41:54.910 回答