stdin adresindeki veri kullanılabilirliğini kontrol etmek için zmq.Poller
kullanılabilir mi? Değilse, en uygun bekleme süresi (ideal olarak), zeromq soketleri üzerinde & stdin veri kullanılabilirliği için ne olurdu?zeromq zmq.Poller ve stdin
5
A
cevap
4
evet zmq Pollers sadece sys.stdin.fileno()
kontrol etmeniz gerekir böylece vb Stdin dahil yerli FDS desteklemek yapın: Eğer Windows üzerinde çalışır asla eminseniz
poller = zmq.Poller()
poller.register(sys.stdin, zmq.POLLIN)
poller.register(mysocket, zmq.POLLIN)
evts = dict(poller.poll(1000))
stdin_ready = evts.get(sys.stdin.fileno(), False)
socket_ready = evts.get(mysocket, False)
1
, sadece sys.stdin
kayıt olabilirsiniz zmq.Poller
ile (described by minrk, above olarak).
Ancak, select()
implementation in Winsock yalnızca yuvaları destekler ve standart giriş gibi "normal" dosya tanımlayıcılarını yoklamak için kullanılamaz. Bu nedenle, Windows üzerinde çalışırken, standart girdiyi inproc taşımada bir 0MQ soketiyle birleştirmeniz gerekir. özel bir çifti soketi kullanılarak
Önerilen uygulama:
def forward_lines(stream, socket):
"""Read lines from `stream` and send them over `socket`."""
try:
line = stream.readline()
while line:
socket.send(line[:-1])
line = stream.readline()
socket.send('') # send "eof message".
finally:
# NOTE: `zmq.Context.term()` in the main thread will block until this
# socket is closed, so we can't run this function in daemon
# thread hoping that it will just close itself.
socket.close()
def forward_standard_input(context):
"""Start a thread that will bridge the standard input to a 0MQ socket and
return an exclusive pair socket from which you can read lines retrieved
from the standard input. You will receive a final empty line when the EOF
character is input to the keyboard."""
reader = context.socket(zmq.PAIR)
reader.connect('inproc://standard-input')
writer = context.socket(zmq.PAIR)
writer.bind('inproc://standard-input')
thread = threading.Thread(target=forward_lines,
args=(sys.stdin, writer))
thread.start()
return reader
if __name__ == '__main__':
context = zmq.Context()
reader = forward_standard_input(context)
poller = zmq.Poller()
poller.register(reader, zmq.POLLIN)
poller.register(...)
events = dict(poller.poll())
if events.get(reader, 0) & zmq.POLLIN:
line = reader.recv()
# process line.
if events.get(..., 0) & zmq.POLLIN:
# ...
İlgili konular
- 1. read.table işlevi ve stdin
- 2. stdout'u ve Stdin ilişkileri
- 3. Python lxml ve Stdin
- 4. zeromq modelini uygulamak için zeromq kullanın
- 5. zeromq ve bind_to_random_port - nasıl liman python'da
- 6. ZeroMQ ve Python'da çoklu abone filtreleri
- 7. Yayıncıda ZeroMQ filtreleme
- 8. ZeroMQ: eşzamansız yanıtlar
- 9. okuma Stdin
- 10. zeromq/zmqpp: İleti
- 11. zeromq yi pypy
- 12. Javascript istemcisindeki ZeroMQ
- 13. Sd üzerinde stdin/stdout'un değiştirilmesi ve açılması
- 14. Stdin ve stdout'u nasıl test edebilirim?
- 15. WkHtmlToPDF - stdin ve üstbilgi/altbilgi ile çalışma
- 16. PHPUnit'teki test STDIN
- 17. Bash STDIN yeniden yönlendirme?
- 18. Biçimdeki stdin in bash
- 19. Python'da stdin kodlaması nasıl değiştirilir
- 20. Zeromq hangi soketin PubSub desenine bağlanmalı
- 21. Stdin to powershell komut dosyası
- 22. Striptizle :: asio :: async_read kullanarak stdin?
- 23. Apache'de bir PHP betiğinde ZeroMQ kullanma
- 24. Stkut/stderr/stdin akışlarını, FFI
- 25. C# iki yönlü IPL stdin ve stdout üzerinde
- 26. Dosyaları altprogram olarak stdin ve stdout olarak kullanma
- 27. STDIN neden Perl programımın donmasına neden oluyor?
- 28. x86_64 aksamındaki STDIN girişi nasıl okunur?
- 29. Dosyaları kullanmadan alt işlem boruları stdin
- 30. Python Linux'ta stdin dosya yolunu bulma
+1: muhteşem. Teşekkürler! – jldupont
** Uyarı **: Bu, Windows'ta çalışmaz ("Onaylama işlemi başarısız oldu: Soket dışında soket işlemi" hatası alıyorum). Bu muhtemelen Windows'un 'select()' uygulamasının yalnızca yuvalarda çalıştığı gerçeğiyle ilgilidir ... –