Перейдите к свойствам проекта - раздел Debug, и под Опциями Запуска, направляющимися существует раздел для Параметров командной строки.
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()
#!/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)
Что вы подразумеваете под «построчно» - между сетевыми хостами много буферов данных, и ни один из них не ориентирован на линию.
Таким образом, вы можете прочитать кучу данных, а затем разбить ее на строки на ближнем конце.
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 для перемещения гигабайт данных.
Вот расширение для ответа @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)