2012-10-31 106 views
1

我試圖在由subprocess.check_output()調用的命令的輸出之間運行比較。由於我在Windows上運行這個,我在輸出中也得到了\r\n(這是件好事)。將check_output()的輸出與文件中的文本進行比較

現在我想比較該命令的輸出和文本文件。這會失敗,因爲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的?謝謝!

+3

以二進制模式 – SilentGhost

+0

打開,請稍後再寫:'usage = usageLines == output' – SilentGhost

回答

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返回以獲取文件的原始內容的想法,則二元模式也可能是一種解決方案。

+0

二進制模式根據需要工作。另外,感謝@SilentGhost – beeryardtech

相關問題