Подпроцесс Python.Popen().communicate() зависает при чтении стандартного вывода [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Подпроцесс Python.Popen().communicate() зависает при чтении стандартного вывода [закрыто]

Сообщение Anonymous »

Сегодня я столкнулся со странной проблемой, возможно, это проблема с командной строкой Windows, но интересно, сталкивался ли кто-нибудь с этой проблемой раньше. Я получаю некоторую информацию с сайта поставщика, используя Selenium и webdriver-manager. Я проследил стек до функции subprocess.Popen().communicate(), точнее, до строки 1196 файла subprocess.py (python v 3.12.2 32bit), пытающейся выполнить stdout.read() . Кажется, возникла проблема с чтением стандарта, он зависает (без ошибок, просто продолжает работать) на этой строке. Я запустил код изнутри PowerShell (в отличие от VS Code, который, похоже, использует CMD), и он сработал. Если я не использую stdout=subprocess.PIPE, он печатает CMD (результатом команды в webdriver-manager является cmd = "(dir 2>&1 *`|echo CMD);&echo powershell") и не выдает ошибок, но, очевидно, это не так уж и полезно, кроме знания того, что CMD запускает команду, просто не выдавая стандартный стандарт. Я пробовал и другие команды, но безуспешно.
Одна из самых странных вещей заключается в том, что в течение как минимум года он работал нормально ежедневно, а затем внезапно возникла эта проблема. Я попробовал тот же код на другой машине, и он работает как положено, но его нужно запускать на машине автоматизации. Это машина с Windows 10... Я бы не стал этого делать, если бы мне не пришлось, но устаревшая программа, которую я автоматизирую, работает только на настольных компьютерах с Windows.
Я бы переопределил библиотека, но он также использует подпроцесс, чтобы установить текущую версию Chrome и использовать правильный драйвер. Я пытался часами, и это тупик, в который я попал.
Редактировать:
Вот код, который зависает. Я могу отлаживать и приостанавливать stdout =stream.communicate()[0].decode(), но он не сможет напечатать(stdout) на следующей строке с помощью F10 (переход).

Код: Выделить всё

import subprocess

def determine_powershell():
"""Returns "True" if runs in Powershell and "False" if another console."""
cmd = "(dir 2>&1 *`|echo CMD);&echo powershell"
with subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.DEVNULL,
stdin=subprocess.DEVNULL,
shell=True,
) as stream:
stdout = stream.communicate()[0].decode()
print(stdout)
return "" if stdout == "powershell" else "powershell"

if __name__ == "__main__":
determine_powershell()
Это взято из webdriver-manager.core.utils, и я не могу запустить этот код в его собственном модуле.
Спасибо,

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Подпроцесс Python.Popen().communicate() зависает при чтении стандартного вывода
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Как сохранить линии Popen.communicate вместе?
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как сохранить линии Popen.communicate вместе?
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Подпроцесс Python, вызов Popen блокируется
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Docker Compose запущен через подпроцесс Python. Popen все еще отвечает на CTRL-C, хотя я переопределил обработчик сигнал
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

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