Я пытаюсь использовать xinetd для удаленного запуска команды (traccejob). Когда я подключаюсь через telnet, все работает нормально. К сожалению, клиент, которого я написал, похоже, не получает данные с сервера. Код выглядит так:
Сервер:
import sys
import commands
def main():
tjinput = sys.stdin.readline().strip()
(ret, out) = commands.getstatusoutput('/usr/bin/tracejob '+tjinput)
print out
sys.stdout.flush()
if __name__ == "__main__":
main()
клиент:
host = 'xxx.xxx.xxx.xxx'
port = 12345
import socket
import sys
def main(argv):
message = 'hello'
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((host, port))
sock.send(message)
data = sock.recv(1024)
sock.close()
print repr(data)
if __name__ == '__main__':
main(sys.argv)
Клиентский процесс останавливается на строке sock.recv (1024). Я не могу сказать, почему sock.recv не читает выходные данные из сокета. Возможно проблема с кодированием? Если это поможет, файл xinetd.d выглядит так:
service tracejob
{
flags = IPv4
disable = no
socket_type = stream
wait = no
user = root
group = root
server = /usr/local/bin/tracejob_xinetd.py
port = 12345
type = UNLISTED
}
где tracejob_xinetd.py - сервер, описанный выше.
Какие-нибудь советы? Заранее спасибо.