Как я могу использовать raw_input с витой? - PullRequest
6 голосов
/ 28 февраля 2011

Я знаю, что raw_input нельзя использовать в витой.Однако вот мое желаемое приложение.

У меня есть аппаратное обеспечение, которое обеспечивает последовательный порт интерактивного терминала.Я пытаюсь подключиться к этому порту и отправлять команды в асинхронном режиме.Мне это нужно, потому что это контроллер мотора, который после того, как я выполню команду, он «заблокирует» и убежит (мой текущий код).Я должен быть в состоянии ввести другую команду, такую ​​как ESTOP в случае проблем или опасности.

Я прочитал кое-что о twisted.internet.stdio.StandardIO, но мне не повезло. Любой совет / помощь по этому вопросу был бы великолепен.

Ответы [ 2 ]

7 голосов
/ 28 февраля 2011

У вас есть несколько вариантов, которые вы можете использовать.Можно было бы использовать дочерний процесс для управления связью с последовательным портом и каналом для связи между родителем и потомком (что упрощается протоколом процессов Twisted).Другой способ - выделить отдельный поток Python и использовать оттуда raw_input.Нормальные механизмы связи между потоками прекрасно работают с Twisted.Единственный реальный поворот исходит от того, как вы будите закрученный реактор из отдельной нити.Основной поддерживаемый механизм для этого использует reactor.callFromThread().Использование нитей в Twisted требует тщательного обдумывания, и его легко испортить (вот почему это обычно не рекомендуется), но иногда это действительно подходящий инструмент для работы.

3 голосов
/ 28 февраля 2011

Вы видели примеры StandardIO?В примерах Twisted core есть пара, stdin.py и stdiodemo.py.Существует более продвинутый пример , который включает редактирование линии и историю в Twisted Conch.Вы можете запустить его с python -m twisted.conch.stdio, чтобы увидеть его в действии.Пример Conch, вероятно, работает только на платформах POSIX, а не Windows.

...