如何從命令的stdout中讀取單個文件的內容而不敲擊磁盤?從子進程的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: seeking backwards is not allowed
那麼如何獲取文件的內容呢?
謝謝,這有助於我進一步。然而...請看我的更新,它不起作用... – Flavius
@Flavius:請注意改變你的問題來解決你遇到的每個新問題並不是一個好習慣。例如,我解決了你最初的問題。很難爲改變問題的答案投票。 –
我應該用相同的標題創建一個新問題嗎?這仍然是同樣的問題。我已經提出了你的答案... – Flavius