Я портирую некоторый код на Python 3 и наткнулся на вызов numpy.fromfile(src)
, который прекрасно работает, когда src
является дескриптором реального файла, но не работает, когда src
равен sys.stdin
. Я свел проблему к следующим двум командам, которые позволят вам увидеть, как проблема существует только в Python 3, но не в Python 2:
$ echo 1 2 3 | python -c 'import numpy,sys; print(numpy.fromfile(sys.stdin, dtype=int, sep=" "))'
[1 2 3]
$ echo 1 2 3 | python3 -c 'import numpy,sys; print(numpy.fromfile(sys.stdin, dtype=int, sep=" "))'
Traceback (most recent call last):
File "<string>", line 1, in <module>
OSError: obtaining file position failed
Когда я смотрю на /usr/lib/python2.7/dist-packages/numpy/core/records.py
, то кажется, что даже в Python2 версии numpy для fromfile говорится:
Файловый объект должен поддерживать произвольный доступ (т. е. он должен иметь методы поиска и поиска).
Так что, я думаю, тот факт, что вышеприведенное работает с Python2, никогда не предполагалось поддерживать. Тем не менее код, который я хочу перенести на Python3, полагался на эту функциональность.
Я попытался прочитать sys.stdin
в io.BytesIO
, но это приведет к ошибке io.UnsupportedOperation: fileno
.
In Я надеялся, что другие также натолкнулись на эту проблему, я хотел попросить простую замену numpy.fromfile()
, которая позволяет читать из стандартного ввода даже на Python3. Конечно, другие проекты уже должны были реализовать решение этой проблемы? Я не смог найти его.