写完后无法从NamedTemporaryFile读取

时间:2014-03-26 10:21:29

标签: python

我正在尝试将文件下载到临时文件并将此文件发布到其他服务。我使用NamedTemporaryFile尝试了这个,但是我被迫关闭文件并重新打开它。

def main():
    validate()
    logging.basicConfig(filename=sys.argv[2]+".log", level=logging.INFO)

    if(sys.argv[3][0:4] == "http"):
        filename = None
        with tempfile.NamedTemporaryFile("w+b", delete=False) as file:
            download(file, sys.argv[3])
            #this logging prints nothing
            logging.debug(file.readlines())
    else:
        #this else just process a local file...


def download(file, url):
    logging.info("Downloading file " + sys.argv[3] + "...")
    start = time.time() * 1000
    r = requests.get(sys.argv[3], stream=True, timeout=2.0)

    #just a dummy check....
    if r.status_code == 200:
        for chunk in r.iter_content():
            file.write(chunk)

        file.flush()
    else:
        logging.error("Server returned an error")
        raise StandardError

如果我在with块之外重新打开文件并尝试阅读它,它就可以了。我不明白为什么我必须关闭临时文件并重新打开它。

有人可以给我一个解释。我是python dev中的新手。

1 个答案:

答案 0 :(得分:5)

这里的问题是readlines()似乎是从当前文件位置读取的。 如果您首先寻找临时文件的开头,您将获得这些行。

file.seek(0)
logging.debug(file.readlines())