I still need to use the file after it is parsed as en email but the email parser is closing it.
What can I do?
thanks
(venv3.4)ubuntu@core01:~/tmp$ cat tmp.eml
From: Example Person <[email protected]>
To: [email protected]
Subject: test2
Date: Sun, 2 Mar 2014 15:42:27 +1100
Hello
(venv3.4)ubuntu@core01:~/tmp$ cat tmp.py
from email.parser import BytesParser, BytesHeaderParser
from email import policy
f = open('tmp.eml', 'rb')
def parsefromfile(f, headersonly=None):
f.seek(0)
if headersonly:
msg = BytesHeaderParser(policy=policy.default).parse(f)
else:
msg = BytesParser(policy=policy.default).parse(f)
print(msg)
print(msg.get('date', None))
f.seek(0)
print(f.read())
parsefromfile(f)
(venv3.4)ubuntu@core01:~/tmp$ python tmp.py
From: Example Person <[email protected]>
To: [email protected]
Subject: test2
Date: Sun, 2 Mar 2014 15:42:27 +1100
Hello
Sun, 02 Mar 2014 15:42:27 +1100
Traceback (most recent call last):
File "tmp.py", line 17, in <module>
parsefromfile(f)
File "tmp.py", line 14, in parsefromfile
f.seek(0)
ValueError: seek of closed file
parseis pretty simple hg.python.org/releasing/3.4/file/77082b818676/Lib/email/… and it doesn't do anything withfpexceptread.headersonlyas the argument and spare this oneif.Parserin the text mode it doesn't close the file. ButBytesParseroverwritesfpwithTextIOWrapperand it somewhat closes it. I think it can be considered a bug.