читать потоковые данные по каналу в Python - PullRequest
0 голосов
/ 30 мая 2018

Мне нужно постоянно читать и обрабатывать данные на одном компьютере, которые генерируются на другом компьютере.

До сих пор я мог использовать mypipe для отправки данных со второго компьютера на первый, используя следующее:

cat mypipe | ssh second_com@IP_address 'cat destfile'

Это работает, и данные теперь постоянно сбрасываются вdestfile, но размер файла увеличивается очень быстро, и это не то решение, которое мне нужно.

То, что я хотел бы сделать, это передать данные непосредственно в мой скрипт на python, не записывая их в файл .Любые предложения о том, как это сделать?

1 Ответ

0 голосов
/ 30 мая 2018

То, что вы написали, не выводит данные в destfile.Что он делает:

  • cat mypipe: выводит содержимое файла с именем mypipe в его стандартный вывод.
  • |: принимает стандартный вывод из cat mypipe иотправляет его как stdin на ssh.
  • ssh second_com@IP_address: создает ssh соединение с другой системой и запускает указанную команду, переадресовывая свой стандартный stdin.
  • 'cat destfile': Запускает команду cat destfile в этой другой системе, которая игнорирует перенаправленный стандартный ввод и выводит содержимое файла с именем destfile в стандартный вывод, что ни к чему не приводит.

Что вы, вероятно,Имеется что-то вроде этого:

cat mypipe | ssh second_com@IP_address 'cat >destfile'

Разница:

  • 'cat destfile': запускает команду cat >destfile в этой другой системе, поэтому cat просто копируетперенаправленный ввод в стандартный вывод, а затем >destfile заставляет этот вывод быть сохраненным в локальном файле destfile.

Таким образом, результат в точности соответствует описанному вами.


Самый очевидный способ изменить это, просто поставить вашу программу на Python на местоcat.Конечно, вам нужно поместить свою программу на удаленный компьютер, где-нибудь доступный, например, в домашний каталог этого пользователя second_com.Затем вы можете выполнить его следующим образом:

cat mypipe | ssh second_com@IP_address 'python myscript.py'

Теперь внутри myscript.py он может читать из sys.stdin, который будет потоком данных, поступающих с cat mypipe (через | и ssh), и вы можете делать с этими данными все, что хотите, без необходимости сначала сохранять их в destfile.

...