-
-
Notifications
You must be signed in to change notification settings - Fork 32k
[doc] Clarify bytes vs text with non-seeking tarfile stream #67641
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
I'm trying to use a tar stream to a Python tarfile object but each time I do have a TypeError: can't concat bytes to str error Here is my test: import tarfile
import sys
tarobj = tarfile.open(mode='r|', fileobj=sys.stdin)
print(tarobj)
tarobj.close()
-----8< $ tar cvf test.tar.gz tests/
tests/
tests/foo1
tests/foo/
tests/foo/bar
$ tar -O -xvf test.tar | ./tarstream.py
tests/
tests/foo1
tests/foo/
tests/foo/bar
Traceback (most recent call last):
File "./tarstream.py", line 6, in <module>
tarobj = tarfile.open(mode='r|', fileobj=sys.stdin)
File "/usr/lib/python3.4/tarfile.py", line 1578, in open
t = cls(name, filemode, stream, **kwargs)
File "/usr/lib/python3.4/tarfile.py", line 1470, in __init__
self.firstmember = self.next()
File "/usr/lib/python3.4/tarfile.py", line 2249, in next
tarinfo = self.tarinfo.fromtarfile(self)
File "/usr/lib/python3.4/tarfile.py", line 1082, in fromtarfile
buf = tarfile.fileobj.read(BLOCKSIZE)
File "/usr/lib/python3.4/tarfile.py", line 535, in read
buf = self._read(size)
File "/usr/lib/python3.4/tarfile.py", line 543, in _read
return self.__read(size)
File "/usr/lib/python3.4/tarfile.py", line 569, in __read
self.buf += buf
TypeError: can't concat bytes to str Regards, |
Using fileobj=sys.stdin.buffer instead should do the trick. The “tarfile” module would expect a binary stream, not a text stream. Given the documentation currently says, “Use this variant in combination with e.g. sys.stdin, . . .”, I presume that is why you were using plain stdin. The documentation should be clarified. |
Looks like the _Stream docstring needs a similar fix regarding stdin and stdout. Also, it wouldn’t hurt to specify that the read() and write() methods should work with bytes, not text. |
…ng tarfile stream (pythonGH-31610) (cherry picked from commit 0651936) Co-authored-by: Stanley <[email protected]>
…ng tarfile stream (pythonGH-31610) (cherry picked from commit 0651936) Co-authored-by: Stanley <[email protected]>
…ing tarfile stream (GH-31610) (GH-113519) (cherry picked from commit 0651936) Co-authored-by: Stanley <[email protected]>
…ing tarfile stream (GH-31610) (GH-113520) (cherry picked from commit 0651936) Co-authored-by: Stanley <[email protected]>
…ng tarfile stream (pythonGH-31610)
…ng tarfile stream (pythonGH-31610)
…ng tarfile stream (pythonGH-31610)
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
Linked PRs
The text was updated successfully, but these errors were encountered: