将check_output()的输出与文件中的文本进行比较

时间:2012-10-31 15:14:16

标签: python windows

我正在尝试对subprocess.check_output()调用的命令的输出进行比较。由于我在Windows上运行它,我在输出中也得到\r\n(这是一件好事)。

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

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的任何建议?谢谢!

1 个答案:

答案 0 :(得分:0)

在python 3中,open使用newlines参数来控制换行符翻译器的行为(see the docs)。此参数的值''将禁用换行符。


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

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

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