2011-02-28 7 views
6

raw_input을 꼬인 상태로 사용할 수 없다는 것을 알고 있습니다. 그러나 여기 내 원하는 응용 프로그램입니다.raw_input을 꼬아 서 어떻게 사용할 수 있습니까?

대화 형 터미널 직렬 포트를 제공하는 하드웨어가 있습니다. 이 포트에 연결하고 비동기 적으로 명령을 보내려고합니다. 이 방법이 필요합니다. 왜냐하면 이것은 일단 내가 명령을 내리면 "차단"되고 도망 가듯이 (현재 코드) 명령을 내리는 모터 컨트롤러이기 때문입니다. 문제 나 위험이있을 때 ESTOP과 같은 다른 명령을 입력 할 수 있어야합니다.

나는 약간의 물건을 twisted.internet.stdio.StandardIO에 관해 읽었다. 그러나 나는 많은 운을 가지지 않고 있었다. .. 이것에 관한 충고/도움은 크다.

답변

7

여기에는 몇 가지 옵션을 사용할 수 있습니다. 하나는 자식 프로세스를 사용하여 직렬 포트와의 통신을 처리하고 부모와 자식간에 통신하는 파이프 (Twisted Process Protocol로 단순화 됨)를 사용하는 것입니다. 또 다른 방법은 별도의 Python 스레드를 스핀 오프하고 거기에서 raw_input을 사용하는 것입니다. 일반적인 스레드 간 통신 메커니즘은 Twisted와 잘 작동합니다. 유일하게 진짜 꼬임은 분리 된 실에서 꼬인 원자로를 깨우는 방법에서 비롯됩니다. 이에 대한 기본 지원 메커니즘은 reactor.callFromThread()입니다. Twisted에서 스레드를 사용하려면 몇 가지 신중한 생각이 필요하며 엉망이되기 쉽기 때문에 (일반적으로 권장하지 않는 이유가 있음) 때때로 작업에 적합한 도구입니다.

3

StandardIO 예제를 보았습니까? Twisted core examples에는 몇 개의 stdin.py와 stdiodemo.py가 있습니다. Twisted Conch에서 회선 편집 및 기록과 관련된 a more advanced example이 있습니다. 이걸 실행하려면 python -m twisted.conch.stdio으로 실행하면됩니다. Conch 예제는 아마도 Windows가 아닌 POSIX 플랫폼에서만 작동합니다.

+0

stdin.py 및 stdiodemo.py 예제는 매우 기초적입니다. 예를 들어, 라인 편집, 히스토리, 탭 완성 또는 readline 인터페이스에서 익숙한 다른 기능을 수행하는 방법을 보여주지 않습니다. 고급 예제는 ConsoleManhole을 과시합니다. 파이썬 코드가 아닌 사용자 지정 명령을 입력하려면 어떻게해야합니까? 그리고 코드에서 TerminalProcessProtocol은 무엇을합니까? 어디서나 참조되지 않는 것 같습니다. – blubberdiblub

+0

사실입니다. 어쩌면 당신은 당신 자신의 질문을하고 싶을 것입니다 ... –

+0

예, 결국 제가 할 것입니다. 하지만 먼저 트위스트와 리드 라인으로 싸우려고 노력할 것입니다. (이것이 내가 적절한 튜토리얼을 찾고있는 이유입니다) 그리고 그게 어떤 과일도 지니지 않는다면, 나는 어디서 붙어 있는지에 대한 질문을 할 수 있습니다. – blubberdiblub

관련 문제