Я предполагаю, что вы пробовали ту же команду из командной строки, и она работала хорошо, даже когда была передана по каналу less
или что-то в этом роде.
У меня сильное чувство, что использование subprocess
исправит это поведение; Этот модуль заменяет вызов popen
, который устарел, и обеспечивает большую степень гибкости при запуске и получении результатов от выполненных команд.
output = Popen(["xxd", "file"], stdout=PIPE).communicate()[0]
Попробуйте запустить процесс под собственной оболочкой и прочитать его канал. Если это по-прежнему не работает, убедитесь, что установлено разумное ограничение на размер буфера, и убедитесь, что вы не используете communicate
, что заставит вас ждать завершения процесса (долгое время при работе с блочным устройством).
Прокомментируйте мой ответ, если он не сработал, и постарайтесь точно описать, что не так - это зависание, просто нет вывода или искажены результаты?