2017-01-04 11 views
0

У меня есть Баш скрипт:Linux. Netcat + баш

#!/bin/bash 
while : 
    do 
     nc -l -p 30003 | python3 script.py 
    done 

Я хочу, что прослушивание работает все время.

Nc LOCALHOST 30003 # работает, отлично типа что-то Ctrl + C

Попробуйте снова nc localhost 30003 # не работает

Таким образом, после того, как сокет закрыт в первый раз, она никогда не откроется снова ..

Как это исправить?

  • Также у меня есть много определенных функций внутри сценария python, поэтому я хочу запустить его с самого начала. Является ли это возможным?

Спасибо.

+0

Действительно ли 'script.py' написан таким образом, что он не закрывает считывающий конец трубы? Если это так, то вы можете сказать 'nc' продолжить прослушивание, добавив к нему опцию -k'. – alvits

ответ

1

Проблема в том, что nc -l -p 30003 не запускается снова до завершения скрипта python3. После Ctrl + C nc localhost 30003 не имеет подключения для прослушивания nc. Если вы замените python3 script.py на cat, сервер nc перезапустится. Таким образом, простым решением было бы иметь выход script.py.

Я предполагаю, что у вас есть состояние, которое вы хотите сохранить. Одна из возможностей - иметь файл с состоянием (переменные и т. Д.), Сохраненные как JSON. Другим является то, что nc записывает вывод в файл и считывает script.py из этого файла.

Если у вас есть время и вы хотите изучить некоторые сети, я рекомендую посмотреть на API-интерфейс python. Вы можете сделать script.py действовать как сервер и читать данные непосредственно из конечной точки соединения, а не проходить через nc.

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^