簡體   English   中英

從python中的NamedTemporaryFile中讀取

[英]reading from a NamedTemporaryFile in python

我正在創建一個tempFile,然后通過使用編輯器打開它來向其中添加文本(以便用戶可以輸入他的消息),然后將其保存以從保存的NamedTemporaryFile中讀取文本。

with tempfile.NamedTemporaryFile(delete=False) as f:
    f.close()
    if subprocess.call([editor.split(" ")[0], f.name]) != 0:
        raise IOError("{} exited with code {}.".format(editor.split(" ")[0], rc))
    with open(f.name) as temp_file:
        temp_file.seek(0)
        for line in temp_file.readlines():
            print line

但是每次它都是空白。 為什么會這樣呢?

如果您使用SublimeText作為編輯器,則需要傳入-w--wait參數,以確保Python程序等待,直到您再次真正關閉SublimeText。

否則,您將開始編輯文件,並立即嘗試讀取當時為空的文件內容。

您還可以通過在閱讀文件之前先print驗證這一點。

例如:

editor = ['/path/to/sublime_text', '-w']

with tempfile.NamedTemporaryFile(delete=False) as f:
    f.close()
    if subprocess.call(editor + [f.name]) != 0:
        raise IOError()

    # read file…

這是一個無需編輯器交互的解決方案,因為我沒有足夠的信息來模仿您的編輯器設置。

import tempfile

with tempfile.NamedTemporaryFile(delete=False) as f:
    f.close()
    with open(f.name, f.mode) as fnew:
        # Replace with editor interaction
        fnew.write('test')
        fnew.seek(0)
        for line in fnew.readlines():
            print line

至少在我的系統和版本(2.7.2)上,我必須進行這些更改才能正確地重新打開文件對象並與之交互,並且它可以在Sublime中正確構建。 f.name是臨時文件路徑,f.mode是已經關閉的文件使用的模式(在這種情況下,它應默認為“ w + b”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM