Если бы это был только script, я мог бы перенаправляться так, как этот 'stdout' | python script.py и выберите его в script, как этот data = sys.stdin.read()
. Но это сервер, и он не будет работать так.
Вопрос: Как написать такой сервер python, чтобы он мог прослушивать/извлекать значения, которые поступают на stdout на Debian, и передавать их дальше. Я не требую полного кода. Просто некоторые идеи о получении stdout, учитывая, что программа является сервером.
Непрерывно приближающиеся значения > stdout > server.py > далее отправлять значения
Мне кажется, вам нужно что-то похожее на подпроцесс Python. В этом примере рассмотрим dmesg
как ваш генератор чисел, а grep
- как ваш сервер сокетов; однако вы просто откроете PIPE
в сервере сокетов вместо того, чтобы развернуть команду оболочки.
Предположим, что у вас есть два процесса: говорящий и сервер...
import time
import sys
DELAY = int(sys.argv[1])
ii = 1
while 1:
sys.stdout.write("Talking every %i seconds, blabbed %i times\n" % (DELAY, ii))
sys.stdout.flush()
ii += 1
time.sleep(DELAY)
from subprocess import Popen, PIPE
from os import kill
import signal
talkpipe = Popen(['python', 'talker.py', '3'],
shell=False, stdout=PIPE)
try:
while True:
line = talkpipe.stdout.readline()
print "SERVER HEARD", line.strip()
except KeyboardInterrupt:
print "Killing child..."
kill(talkpipe.pid, signal.SIGTERM)
Выполнение этого с помощью python server.py
дает...
[mpenning@Bucksnort tmp]$ python server.py
SERVER HEARD Talking every 3 seconds, blabbed 1 times
SERVER HEARD Talking every 3 seconds, blabbed 2 times
SERVER HEARD Talking every 3 seconds, blabbed 3 times
SERVER HEARD Talking every 3 seconds, blabbed 4 times
^CTraceback (most recent call last):
File "talker.py", line 11, in <module>
time.sleep(DELAY)
KeyboardInterrupt
Killing child...
[mpenning@Bucksnort tmp]$
subprocess
, и как вы подключили стандартный stdout
этой программы к стандартному stdin
на вашем сокет-сервере.