Продолжительный ssh управляет в Python paramiko модулем (и как закончить их),

Вы можете использовать командную строку для этого. В Linux используйте sed.

sed -i 's/\.png/\.png alt=* title=*/g'

Здесь выполняется поиск по .png и замена на .png alt=* title=*. Вы должны использовать обратную косую черту перед. потому что это особый характер.

22
задан user17925 17 April 2009 в 15:51
поделиться

3 ответа

1) Вы можете просто закрыть клиент, если хотите. Сервер на другом конце убьет хвостовой процесс.

2) Если вам нужно сделать это неблокирующим способом, вам придется использовать объект канала напрямую. Затем вы можете следить за stdout и stderr с помощью channel.recv_ready () и channel.recv_stderr_ready () или использовать select.select.

14
ответ дан 29 November 2019 в 04:36
поделиться

Вместо вызова exec_command на клиенте, заполучите транспорт и сгенерируйте свой собственный канал. Канал можно использовать для выполнения команды, и вы можете использовать его в операторе выбора, чтобы выяснить, когда данные могут быть прочитаны:

#!/usr/bin/env python
import paramiko
import select
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('host.example.com')
transport = client.get_transport()
channel = transport.open_session()
channel.exec_command("tail -f /var/log/everything/current")
while True:
  rl, wl, xl = select.select([channel],[],[],0.0)
  if len(rl) > 0:
      # Must be stdout
      print channel.recv(1024)

Объект канала может считываться и записываться, соединяясь с стандартный вывод и стандартный ввод удаленной команды. Вы можете попасть в stderr, вызвав channel.makefile_stderr (...) .

Я установил тайм-аут на 0,0 секунд, потому что было запрошено неблокирующее решение. В зависимости от ваших потребностей, вы можете заблокировать с ненулевым таймаутом.

21
ответ дан 29 November 2019 в 04:36
поделиться

Чтобы закрыть процесс, просто запустите:

interface.close()

С точки зрения неблокирования, вы не можете получить неблокирование читать. Лучшее, что вы могли бы сделать, - это анализировать по одному «блоку» за раз, «stdout.read (1)» будет блокироваться только тогда, когда в буфере не осталось символов.

0
ответ дан 29 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: