2011-02-28 20 views
6

Ham_input'un bükülmüş olarak kullanılamayacağını biliyorum. Ancak burada istediğim uygulama.Bir raw_input'u bükülmüş olarak nasıl kullanabilirim?

Etkileşimli bir terminal seri bağlantı noktası sağlayan bir donanım parçam var. Bu bağlantı noktasına bağlanmaya ve komutları eşit olmayan bir şekilde göndermeye çalışıyorum. Bu şekilde buna ihtiyacım var çünkü bu, bir komutu verdiğimde "engelleyeceğim" ve (şimdiki kodum) çalışacak olan bir motor kontrolörü. Sorun veya tehlike durumunda ESTOP gibi başka bir komuta girebilmem gerekir.

twisted.internet.stdio.StandardIO ile ilgili bazı şeyler okudum ancak çok şansım olmadı .. Bu konuda herhangi bir tavsiye/yardım harika olurdu.

cevap

7

Kullanabileceğiniz birkaç seçeneğiniz var. Biri, ana port ile iletişim kurmak için bir çocuk prosesi kullanmak ve ana ve çocuk arasında iletişim kurmak için bir boru kullanmaktır (Twisted'in Proses Protokolü ile basitleştirilmiştir). Bir diğeri ayrı bir Python iş parçacığı döndürmek ve oradan raw_input kullanmaktır. Normal inter-thread iletişim mekanizmaları Twisted ile iyi çalışır. Tek gerçek bükülme, bükülmüş reaktörün ayrı iplikten nasıl uyandığından kaynaklanır. Bunun için desteklenen birincil mekanizma reactor.callFromThread() kullanıyor. Twisted'teki thread'ların kullanımı biraz dikkatli düşünmeyi gerektirmekte ve bu durumun düzeltilmesi kolaydır (bu yüzden genellikle cesaretsizdir) ancak bazen iş için doğru araç budur.

3

StandardIO örneklerini gördünüz mü? Twisted core examples, stdin.py ve stdiodemo.py adreslerinde bir çift var. Twisted Conch'da çizgi düzenleme ve tarih içeren a more advanced example var. Bunu çalışırken görmek için bunu python -m twisted.conch.stdio ile çalıştırabilirsiniz. Conch örneği muhtemelen sadece Windows değil, POSIX platformlarında çalışır.

+0

stdin.py ve stdiodemo.py örnekleri çok ilkeldir. Örneğin, satır düzenleme, tarih, sekme tamamlama ya da bir tanesi readline arabirimlerinde kullanılan diğer özelliklerin nasıl yapıldığını göstermezler. Gelişmiş örnek yalnızca ConsoleManhole uygulamasını gösterir. Python kod olmayan özel komutları girmek istersem ne olur? Ve kodda TerminalProcessProtocol ne yapar? Hiçbir yerde referans görünmüyor. – blubberdiblub

+0

Bu doğru. Belki de kendi başına bir soru sormak istersiniz ... –

+0

Evet, sonunda olabilir. Ama önce ben bükülmüş ve readline ile mücadele etmeye çalışacağım (bu yüzden uygun öğreticiler arıyordum) ve eğer bu herhangi bir meyve taşımıyorsa, muhtemelen nerede sıkıştığım hakkında bir soru oluşturabilirim. – blubberdiblub

İlgili konular