我正在尝试将文件下载到临时文件并将此文件发布到其他服务。我使用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中的新手。
答案 0 :(得分:5)
这里的问题是readlines()似乎是从当前文件位置读取的。 如果您首先寻找临时文件的开头,您将获得这些行。
file.seek(0)
logging.debug(file.readlines())