Создание нового терминала / окна оболочки для простого отображения текста

1

Я хочу передать [edit: текст в реальном времени] вывод нескольких подпроцессов (иногда связанных, иногда параллельных) в одно окно терминала /tty, которое не является активной оболочкой python (будь то IDE, командной строки, или работает script с помощью tkinter). IPython не вариант. Мне нужно что-то, что поставляется со стандартной установкой. Предпочитаете OS-агностическое решение, но нужно работать с XP/Vista.

Я отправлю то, что я уже пробовал, если вы этого хотите, но его неловко.

  • 0
    Возможно, вы хотите что-то вроде простоя (редактор) делает? Окно ведет себя как стандартный вывод?
  • 0
    Вы запускаете процессы из скрипта Python или запускаете их из командной строки и хотите собрать все входные данные в скрипт Python, над которым вы работаете? Не могли бы вы привести более конкретный пример?
Теги:

3 ответа

2
Лучший ответ

Хорошее решение в Unix будет называться pipe. Я знаю, что вы спрашивали о Windows, но в Windows может быть аналогичный подход, или это может быть полезно для кого-то еще.

на терминале 1:

mkfifo /tmp/display_data
myapp >> /tmp/display_data

на терминале 2 (bash):

tail -f /tmp/display_data

Изменить: изменена команда терминала 2, чтобы использовать "tail -f" вместо бесконечного цикла.

0

Вы можете создать систему производителей-заказчиков, где строки вставлены над сокетом (здесь нет ничего интересного). Клиент будет многопоточным сервером сокетов, слушая соединения и помещая все строки в Queue. В отдельном потоке он получит предметы из очереди и распечатает их на консоли. Программа может быть запущена из консоли cmd или с консоли eclipse в качестве внешнего инструмента без особых проблем.

С вашей точки зрения, это должно быть в реальном времени. В качестве бонуса вы можете размещать производителей и клиентов на отдельных коробках. Производители могут даже создать сеть.

Некоторые примеры программирования сокетов с помощью python можно найти здесь. Посмотрите здесь для примера tcp echoserver и здесь для клиент сокета tcp "hello world".

Существует также расширение для окон, которое позволяет использовать именованные каналы.

В linux (возможно, cygwin?) Вы могли бы просто хвост -f named-fifo.

Удачи!

  • 0
    +1: это звучит очень похоже на то, что мне нужно. Я мог бы в конечном итоге распространить эти процессы по сети в будущем. -1: нет ссылок / примеров. (Google "системного сокета производитель-клиент" возвращает ссылки на протезные производственные решения ... и их варианты не очень плодотворны) Спасибо за предложение!
  • 0
    Это был google python socket , сначала результат, затем прокрутите вниз до раздела «примеры». Мне казалось очевидным, извините за это. Я добавил несколько ссылок на примеры, которые могут вам помочь.
Показать ещё 2 комментария
0

Вы говорите "труба", поэтому я предполагаю, что вы имеете дело с текстовым выходом из подпроцессов. Простым решением может быть просто запись вывода в файлы?

например. в подпроцессе:

  • Перенаправление вывода %TEMP%\output.txt
  • При выходе скопируйте output.txt в каталог, который просматривает ваш основной процесс.

В основном процессе:

  • Каждую секунду изучайте каталог для новых файлов.
  • Когда файлы найдены, обработайте и удалите их.

Вы можете закодировать имя подпроцесса в имени выходного файла, чтобы вы знали, как его обрабатывать.

  • 0
    Я должен был упомянуть, что планирую направлять stdout в режиме реального времени для каждого процесса. Файловое решение работоспособно, но мои пользователи привыкли к времени отклика 30-60 Гц. Я уверен, что жесткий диск может справиться с этим, но это кажется ненужным. Кроме того, мне все еще неясно, как создать похожее на оболочку окно, которое отображает только выводимый текст (отдельно от текущей IDE / script-stdout), будь то файл или вывод по конвейеру.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню