2013-09-25 3 views
0

Я пытаюсь распечатать содержимое папки на удаленном сервере. Код, который я использовал, это:Подключение к удаленному серверу с использованием Python

srcserver = 'abc.com' 
dyndir = '\\\\%s\\E$\\Backup\\' %(srcserver) 
ls = glob.glob('%s*' %dyndir) 
print ls 

Когда я пытаюсь это сделать, он возвращает пустой массив. Не могли бы вы помочь мне решить эту проблему.

ответ

0

Доступ к файлам на удаленном сервере на самом деле очень сложный! В какой-то момент программное обеспечение должно установить сетевое подключение, аутентифицировать, перевести команды файловой системы в сетевые пакеты и так далее. Если вы сделаете это так, используя glob.glob, как в локальной файловой системе, вы, по сути, полагаетесь на виртуальную файловую систему Windows, чтобы выполнить всю эту работу за вас. Я не удивлен, что это не работает, потому что многое может пойти не так (например, Windows vfs может перехватывать команды файловой системы на более высоком уровне, чем этот относительно низкоуровневый способ доступа к файловой системе).

Если вы определенно хотите, чтобы сделать это так, то вы должны добавить следующую информацию на ваш вопрос:

  • Вашей точной операционной систему (этот метод, вероятно, будет достаточно непереносимым)
  • Независимо от того удаленная система в вопросе уже установлена ​​пользователем перед запущен скрипт, или если вы пытаетесь открыть новое соединение
  • ли вам нужно для проверки подлинности на удаленный сервер, чтобы получить доступ к его

Есть, вероятно, дополнительные соответствующие биты информации, о которых я не могу думать, потому что это начинает быть скорее вопросом Windows, чем вопросом Python, когда вы смотрите на него. Возможно, вы захотите добавить к своим тегам вопроса «Windows» и некоторые другие релевантные ключевые слова, такие как «SMB» или «CIFS», если вы хотите использовать решение на базе Windows vfs.

Альтернативой может быть использование клиента SMB/CIFS, полностью исключающего файловую систему Windows. Вы можете использовать Python для управления клиентом командной строки, например smbclient. Или вы могли бы использовать библиотеку Python для обработки этих битов, хотя не очень часто используется Python для такого рода вещей, поэтому некоторые библиотеки могут быть ошибочными, плохо поддерживаемыми или устаревшими. Google «Python SMB», если вы хотите попробовать этот подход; первые несколько хитов имеют отношение к этой проблеме.

+0

Что? Python имеет несколько уважаемых библиотек для этого ... – Greg

+0

@Greg Пожалуйста, соедините их в пользу OP! Когда я посмотрел, первый (pysmb) был помечен как «экспериментальный», а второй (PySmbClient) назвал себя «уродливым взломом». –

+0

ткань уже связана в моем посте. OP может использовать [paramiko] (https: // github.com/paramiko/paramiko), если нужен клиент низкого уровня – Greg

0

Вы должны попробовать использовать fabric

Это обеспечивает прямой вперед ssh соединение с сервером и позволяет запускать команды на удаленном сервере, используйте sftp для передачи файлов, в основном все, что вы можете сделать с помощью ssh

После установки ткани:

from fabric.api import run, settings 

with settings(host_string="mybox-name"): 
    run("ls /path/to/my/folder") 

Если вы используете окна как предыдущий плакат означает, то я хотел бы предложить checki ng out this stackoverflow ticket

Смежные вопросы