как скопировать файл между 2 компьютерами в сети на python

#python

#python

Вопрос:

Я пытаюсь переместить файл журнала с компьютера, на котором выполняется операция, на другой компьютер, который получит файл журнала и обработает его, вернув документ с результатом анализа.

Я использую Python для работы, но я открыт для других вариантов (я должен запустить эту копию через консоль в OSX, из-за того, что большая часть моей работы выполняется в сценариях оболочки; поэтому не могу использовать какое-либо визуальное решение; все, что можно запустить с помощью скрипта, тоже будет работать); любое предложение более чем приветствуется, поскольку у меня на самом деле нет любимого способа сделать это (просто пытаюсь сделать менее проблематичным….Мне не нужно никакого шифрования безопасности, поскольку оба компьютера находятся в моей внутренней сети, связь с внешним не выполняется).

Надеюсь, что кто-нибудь сможет указать мне правильное решение, заранее спасибо.

Комментарии:

1. en.wikipedia.org/wiki/Secure_copy

2. Я знаю об SCP, но для этого требуется SSH-соединение, и я хочу просто скопировать файл без аутентификации.

3. Я бы просто сделал ssh-copy-id первый, чтобы обойти аутентификацию.

Ответ №1:

Я использую это все время дома, поэтому мне не нужно постоянно запускать демоны общего доступа к файлам:

 python -m SimpleHTTPServer
  

На клиентском компьютере используйте браузер или wget.

На самом деле я использую его так часто, что создал этот скрипт, который также печатает IP-адрес с именем serv . Не стесняйтесь использовать его в соответствии с вашими потребностями. Просто cd в папку и serv все.

 #!/usr/bin/env python
import subprocess as sub
import BaseHTTPServer
import SimpleHTTPServer as httpd

# override this method to speed up connection
def _bare_address_string(self):
    host, port = self.client_address[:2]
    return '%s' % host
BaseHTTPServer.BaseHTTPRequestHandler.address_string = _bare_address_string

# get ip address and print
info = sub.Popen('/sbin/ifconfig', stdout=sub.PIPE).communicate()[0]
tokens = []
for line in info.split('n'):
    if 'inet' in line:
        if '127.0.0.1' not in line:
            tokens = line.split()
print
print '    ', tokens[1].replace(':', ': '), 'n    ',


# start server
try:
    httpd.test()
except KeyboardInterrupt:
    print 'x08x08Killed'
  

Комментарии:

1. Интересное решение; Я попробую, даже если это кажется немного более сложным, чем то, что я имел в виду 🙂

2. Первая строка настолько проста, насколько это возможно.

Ответ №2:

NFS монтирует файловую систему, затем обе системы могут обращаться к тем же файлам, как если бы они были локальными. В противном случае вы могли бы использовать сокеты.

Комментарии:

1. Хороший момент; установка общего каталога на одной машине позволяет мне использовать стандартный cp; спасибо за предложение!