Могу ли я вызвать поиск в канале stdout подпроцесса и ожидать, что он будет работать в Windows 11?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Могу ли я вызвать поиск в канале stdout подпроцесса и ожидать, что он будет работать в Windows 11?

Сообщение Anonymous »

Если я использую p = subprocess.Popen(..., stdout=subprocess.PIPE), могу ли я вызвать поиск в p.stdout и ожидать, что он будет работать в Windows 11 ?
Из этой ссылки (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)
Тем не менее, похоже, что с этой даты могут возникнуть проблемы, специфичные для ОС, или обновления Python, которые могут изменить ответ, поскольку я могу запустить эту программу, если изменю "ls" к команде Windows. Кроме того, тип p.stdout — это io.BufferedReader, вызов p.stdout.seekable() возвращает True, а вызов search большую часть времени работает так, как ожидалось. .
Если ответ «нет», то почему в большинстве случаев это работает? Кроме того, если поиск здесь не разрешен, не должен ли 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 ...'
Целевая платформа — Windows 11, Python v3.11.5.

Подробнее здесь: https://stackoverflow.com/questions/791 ... windows-11
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»