Из этой ссылки (2011 г.) кажется, что ожидаемый ответ - нет, так как "по трубе искать нельзя". Эта ссылка также показывает, что при попытке возникает ошибка IOError.
[*]https://bugs.python.org/issue12877
Код: Выделить всё
from subprocess import Popen, PIPE
p = Popen(['ls'], stdout=PIPE)
p.wait()
p.stdout.seek(0)
Traceback (most recent call last):
File "t.py", line 5, in
p.stdout.seek(0)
IOError: [Errno 29] Illegal seek
Python 2.7.2, Arch Linux x86-64 (Kernel 3.0)
Если ответ «нет», то почему в большинстве случаев это работает? Кроме того, если поиск здесь не разрешен, не должен ли p.stdout.seekable() возвращать False?
Следующая программа выполняется без ошибок:< /p>
Код: Выделить всё
import subprocess
import time
p = subprocess.Popen("timeout /t 2", stdout=subprocess.PIPE)
print(type(p.stdout))
assert p.stdout.seekable()
time.sleep(0.5)
p.stdout.seek(0, 2)
byte_count = p.stdout.tell()
p.stdout.seek(0)
data = p.stdout.read(byte_count)
print(data)
Код: Выделить всё
b'\r\nWaiting for 2 seconds, press a key to continue ...'
Подробнее здесь: https://stackoverflow.com/questions/791 ... windows-11