背景Python Popen.communicate()。類型錯誤:預期字符串或緩衝區,而不是列出
的代碼應該得到一個文件對象,並用awk從中提取信息。
它使用帶'pieceSize'作爲參數的readlines()。 'pieceSize'是我希望readlines()在通過文件時使用的MB的數量。我希望我的程序不會遇到麻煩,因爲如果需要讀取的文件比我的計算機的內存大得多。 正在讀取的文件有許多行和列。
下面的代碼試圖使用awk從第一行讀取第一個字段。
import os
from subprocess import Popen, PIPE, STDOUT
def extract_info(file_object):
pieceSize = 16777216 # 16MB
for line in file_object.readlines(pieceSize):
eachline = line.rsplit() # removing extra returns
p = Popen(['awk','{{print `$`1}}'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
pOut = p.communicate(input=eachline)[0]
print(pOut.decode())
錯誤消息
我收到的錯誤讀取類似...
... in _communicate_with_poll(self, input)
chunk = input[input_offset : input_offset + _PIPE_BUF]
try:
-> input_offset += os.write(fd, chunk)
except OSError as e:
if e.errno == errno.EPIPE:
TypeError: must be string or buffer, not list
由於錯誤提示,'eachline'是'list'。你應該在'p.communicate'中傳遞'string'或'buffer'到'input'。 – Forge
你期待你的程序輸出是什麼?你爲什麼使用'awk'? – Forge