语境
该代码应该使用 awk 获取文件对象并从中提取信息。
它使用 readlines() 和 'pieceSize' 作为参数。'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