Я хочу передать [edit: текст в реальном времени] вывод нескольких подпроцессов (иногда связанных, иногда параллельных) в одно окно терминала /tty, которое не является активной оболочкой python (будь то IDE, командной строки, или работает script с помощью tkinter). IPython не вариант. Мне нужно что-то, что поставляется со стандартной установкой. Предпочитаете OS-агностическое решение, но нужно работать с XP/Vista.
Я отправлю то, что я уже пробовал, если вы этого хотите, но его неловко.
Хорошее решение в Unix будет называться pipe. Я знаю, что вы спрашивали о Windows, но в Windows может быть аналогичный подход, или это может быть полезно для кого-то еще.
на терминале 1:
mkfifo /tmp/display_data
myapp >> /tmp/display_data
на терминале 2 (bash):
tail -f /tmp/display_data
Изменить: изменена команда терминала 2, чтобы использовать "tail -f" вместо бесконечного цикла.
Вы можете создать систему производителей-заказчиков, где строки вставлены над сокетом (здесь нет ничего интересного). Клиент будет многопоточным сервером сокетов, слушая соединения и помещая все строки в Queue. В отдельном потоке он получит предметы из очереди и распечатает их на консоли. Программа может быть запущена из консоли cmd или с консоли eclipse в качестве внешнего инструмента без особых проблем.
С вашей точки зрения, это должно быть в реальном времени. В качестве бонуса вы можете размещать производителей и клиентов на отдельных коробках. Производители могут даже создать сеть.
Некоторые примеры программирования сокетов с помощью python можно найти здесь. Посмотрите здесь для примера tcp echoserver и здесь для клиент сокета tcp "hello world".
Существует также расширение для окон, которое позволяет использовать именованные каналы.
В linux (возможно, cygwin?) Вы могли бы просто хвост -f named-fifo.
Удачи!
google python socket
, сначала результат, затем прокрутите вниз до раздела «примеры». Мне казалось очевидным, извините за это. Я добавил несколько ссылок на примеры, которые могут вам помочь.
Вы говорите "труба", поэтому я предполагаю, что вы имеете дело с текстовым выходом из подпроцессов. Простым решением может быть просто запись вывода в файлы?
например. в подпроцессе:
%TEMP%\output.txt
output.txt
в каталог, который просматривает ваш основной процесс.В основном процессе:
Вы можете закодировать имя подпроцесса в имени выходного файла, чтобы вы знали, как его обрабатывать.