Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/89: Рейтинг темы: голосов - 89, средняя оценка - 4.78
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 104

Перехват ввода-вывода

24.09.2015, 02:37. Показов 17070. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Предположим есть некоторая внешняя программа external.py или external.exe. Программа принмает и печатает данные в консоли. Как, при помощи другой программы работать с этими данными(перехват потоков ввода вывода)?

Вот небольшой пример в нешней программы:
Python
1
2
a = int(input())
print(a)
Из другой программы нужно передать ей число, а в ответ получить от неё же это число. Как это сделать?

Добавлено через 24 минуты
Вообще говоря, я хочу сделать тестер консольных приложений. На вход подаются некоторые данные на выходе получаются тоже данные. Сравнивать ожидаемые данные с полученными. И хотелось бы чтобы работало как с файлами так и с консолью. И хочется, чтобы он работал также просто и прозрачно как класс тестирования, унаследованный от unittest.TestCase
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.09.2015, 02:37
Ответы с готовыми решениями:

Перехват input в console без вывода на экран
Как можно реализовать перехват ввода с клавиатуры в консоли, так чтоб текст не выводился на экран ? Выглядеть должно на подобие...

Перехват потоков ввода/вывода
Проблема в следующем: Имеется консольное приложение, например такое: //1.exe #include <iostream> using namespace std; int...

Перехват потоков ввода/вывода
Уже 2 дня бьюсь над проблемой: на основе примера http://www.sources.ru/cpp/using_anonymous_pipes.shtml запускаю программу (не мою,...

25
Эксперт Python
 Аватар для dondublon
4663 / 2082 / 367
Регистрация: 17.03.2012
Сообщений: 10,203
Записей в блоге: 6
28.09.2015, 10:02
Студворк — интернет-сервис помощи студентам
Не нервничайте. Будете нервничать - обижусь и уйду.
В чём проблема заменить "Hello world" на то, что вы получили из вывода процесса?
Или вы там получаете одни None? Но тогда проблема - получить из процесса, что надо, а не записать.
0
Заблокирован
28.09.2015, 10:16
Видно же было выше что получаю None.
Цитата Сообщение от dondublon Посмотреть сообщение
проблема - получить из процесса
Может и так, но print(outs, errs) показывает полный вывод. Дальше я уже не понимаю.
И
Code
1
print(outs, errs, file=open('outfile', 'w'))
Даёт полный вывод а в файл идут одни None. Это кстати то же самое что и f.write(outs)

Добавлено через 1 минуту
По логике надо вывод сначала копировать. Это возможно?
0
Эксперт Python
 Аватар для dondublon
4663 / 2082 / 367
Регистрация: 17.03.2012
Сообщений: 10,203
Записей в блоге: 6
28.09.2015, 10:18
Может, вам в communicate надо что-то передавать? То, что передаёте процессу. Отделять с помощью "\n".
0
Заблокирован
28.09.2015, 10:39
Я плохо знаю subprocess.Popen.
communicate использую потому что получается управлять проигрывателем в консоли.
Следовательно принимаются сигналы с клавиатуры. Вывод изменяется, например показывает что повысил громкость или перешёл в другую позицию по файлу.
В случае
Code
1
subprocess.Popen([command, stdout=f)
Вывод идёт в файл но не весь. То что проигрыватель выводит постоянно, вживую, не знаю как это по другому определить остаётся в консоли и в файл не пишется. Это уже не подходит. К тому же управление пропадает.
На клаву не реагирует.
При
Code
1
2
play = subprocess.Popen(['mpv', song], stdout=subprocess.PIPE)                                                                
vivod = play.stdout.read().strip()
управление пропадает сразу

Добавлено через 5 минут
Я и в прошлый раз забросил по тому что не захотел всю документацию к subprocess разбирать.
Там ещё пришлось бы с пайпами разбираться. Оставил на потом.
0
Эксперт Python
 Аватар для dondublon
4663 / 2082 / 367
Регистрация: 17.03.2012
Сообщений: 10,203
Записей в блоге: 6
28.09.2015, 10:41
Во втором варианте вы не используете communicate, значит, процессу ничего не передаёте.
Сигналы с клавиатуры если принимаете, то они принимаются вашим приложением. Оно должно преобразовать из в текст и передать communicate.
Я не делал communicate с интерактивностью, только фиксированные команды передавал.
Подозреваю, что после того, как ваш пустой communicate отработал, программа (ваша) просто переходит дальше и процесс уже не принимает ничего от вашей программы, сам по себе работает.
0
Заблокирован
28.09.2015, 10:50
Похоже надо снова забить. Происходит что-то сложное с выводом. Как может быть несколько выводов?
Я сейчас запустил напрямую в консоли без питона.
Code
1
mpv file.ogg | tee outfile
Интерактивность пропала, в файл не пишется позиция. По прежнему выводится в консоль.
Надо не с subprocess разбираться а с приложением. Извините что отвлёк Вас по пусту.

Как то наверняка можно сделать но знаний пока не хватает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.09.2015, 10:50

Перехват ввода-вывода другой программы
Имеется игровой сервер, запускается ввиде консоли. В частности, сервер игры CS Source. Нужно сделать так, чтобы я мог получать всю...

Перехват стандартных потоков ввода-вывода
Здравствуйте. Проблема вот в чем: Имеется файл code.exe, который ожидает ввода двух чисел и выдаёт их сумму. Вот его срр-код: ...

Перехват ввода/вывода процесса нестандартными способами
Доброго времени суток! Как перехватить ввод/вывод консольного приложения не прибегая к стандартным способам. Под стандартными способами я...

Перехват потока вывода и ввода из командной строки
Допустим, у меня работает консольное приложение, которое в какой-то момент времени запускает другое консольное приложение, и в него...

Перехват вывода консольного приложения (сложный вариант вывода приложением информации на консоль)
Добрый день. . Столкнулся с такой проблемой. Есть консольное приложение "cisco vpn client 4.7", которое работает как консольное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru