ディスクにアクセスせずに、コマンドの stdout から個々のファイルの内容を読み取るにはどうすればよいですか?
私はこのようなものを思いついた:
def get_files_from(sha, files):
from subprocess import Popen, PIPE
import tarfile
p = Popen(["git", "archive", sha], bufsize=10240, stdin=PIPE, stdout=PIPE, stderr=PIPE)
tar = tarfile.open(fileobj=p.stdout, mode='r|')
p.communicate()
members = tar.getmembers()
names = tar.getnames()
contents = {}
for fname in files:
if fname not in names:
contents[fname] = None
continue
else:
idx = names.index(fname)
contents[fname] = members[idx].tobuf()
contents[fname] = tar.extractfile(members[idx]) #<--- HERE
tar.close()
return contents
.read()
問題は、マークされた回線にコールを追加することです
contents[fname] = tar.extractfile(members[idx]) #<--- HERE
エラーが発生します:
tarfile.StreamError: 逆方向へのシークは許可されていません
では、ファイルの内容を取得するにはどうすればよいでしょうか。