Python 将check_output()的输出与文件中的文本进行比较
我正在尝试对Python 将check_output()的输出与文件中的文本进行比较,python,windows,Python,Windows,我正在尝试对子流程调用的命令的输出进行比较。请检查\u output()。由于我在Windows上运行此操作,因此在输出中也会得到\r\n(这是一件好事) 现在我想将该命令的输出与文本文件进行比较。此操作失败,因为open()没有保留\r。以下是我到目前为止得到的信息: try: output = subprocess.check_output(paramList, universal_newlines=False,
子流程调用的命令的输出进行比较。请检查\u 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
的建议?谢谢 在Python3中,open使用换行符
参数来控制换行符转换器()的行为。如果此参数的值为”
,则会禁用换行转换
如果不能使用python 3,则由
open
打开的文件对象具有newline
属性,该属性包含原始类型的换行符,因此可以使用该属性获取原始内容:
with open(EMCMD_INCORRECT_PARAMS, 'r') as fd_usage:
usageLines = fd_usage.read().replace('\n', fd_usage.newline)
如果您不喜欢对
read
返回的内容进行后处理以获取文件的原始内容,那么二进制模式也可能是一个解决方案。请在将来只写:usage=usageLines==output
二进制模式根据需要工作。还有,感谢@SilentGhost