Считайте файл из сервера с SSH использование Python

Перейдите к свойствам проекта - раздел Debug, и под Опциями Запуска, направляющимися существует раздел для Параметров командной строки.

31
задан Martin Prikryl 1 April 2019 в 10:10
поделиться

4 ответа

Paramiko's SFTPClient class позволяет получить файловый объект для чтения данных из удаленного файла питоническим способом.

Предполагая, что у вас есть open SSHClient :

sftp_client = ssh_client.open_sftp()
remote_file = sftp_client.open('remote_filename')
try:
    for line in remote_file:
        # process line
finally:
    remote_file.close()
57
ответ дан 27 November 2019 в 21:50
поделиться
#!/usr/bin/env python
import paramiko
import select
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('yourhost.com')
transport = client.get_transport()
channel = transport.open_session()
channel.exec_command("cat /path/to/your/file")
while True:
  rl, wl, xl = select.select([channel],[],[],0.0)
  if len(rl) > 0:
      # Must be stdout
      print channel.recv(1024)
5
ответ дан 27 November 2019 в 21:50
поделиться

Что вы подразумеваете под «построчно» - между сетевыми хостами много буферов данных, и ни один из них не ориентирован на линию.

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

ssh otherhost cat somefile | python process_standard_input.py | do_process_locally

Или вы можете попросить процесс прочитать группу данных на дальнем конце, разбить ее и отформатировать построчно. line и отправьте его вам.

scp process_standard_input.py otherhost
ssh otherhost python process_standard_input.py somefile |  do_process_locally

Единственная разница, которая меня волнует, - это способ уменьшения объема данных в ограниченном сетевом канале. В вашей ситуации это может иметь значение, а может и не иметь значения.

В общем, нет ничего плохого в использовании cat по каналу SSH для перемещения гигабайт данных.

4
ответ дан 27 November 2019 в 21:50
поделиться

Вот расширение для ответа @Matt Good :

from contextlib     import closing
from fabric.network import connect

with closing(connect(user, host, port)) as ssh, \
     closing(ssh.open_sftp()) as sftp, \
     closing(sftp.open('remote_filename')) as file:
    for line in file:
        process(line)
10
ответ дан 27 November 2019 в 21:50
поделиться
Другие вопросы по тегам:

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