Откройте общую папку Windows через машину Linux - PullRequest
5 голосов
/ 10 марта 2010

Я использую python 2.5 в Ubuntu, и в той же сети есть машина с именем machine1 Папка общая.

Как получить файл в определенной папке на этом компьютере?

Я пытался, но безуспешно:

urllib.urlopen('\\machine1\folder\file.txt')

Ответы [ 4 ]

6 голосов
/ 10 марта 2010

В Linux есть утилита под названием smbmount, которую можно найти в пакете smbutils, я считаю.

Это утилита командной строки, которая монтирует общий ресурс Windows в каталог на локальном компьютере, необязательно с именем пользователя / паролем.

smbmount - это, я считаю, утилита, которая запускается с правами root, поэтому не знаю, подходит ли она вам. Может быть, его можно использовать как пользователь.

Вы можете либо смонтировать общий ресурс по умолчанию на компьютере с Linux, тем самым получая доступ к файлам на нем как к локальным файлам, или вы можете сделать smbmount / smbumount из скрипта python с помощью exec или чего-то подобного.

mkdir WindowsShare # Do this only once
smbmount \\server\share /home/me/WindowsShare -ousername=...,password=...
ls /home/me/WindowsShare
smbumount /home/me/WindowsShare

В целях безопасности имя пользователя и пароль могут быть записаны в файл. Проверьте справочную страницу .

Если вам нужно что-то полностью python, взгляните на pysmb . Термины для Google: Python, Smb, CIFS.

2 голосов
/ 10 марта 2010

urllib не понимает протокол SMB. Вам нужно будет использовать gio через pygobject для получения файла.

0 голосов
/ 10 марта 2010

Если папка является общей, я думаю, что она должна быть смонтирована в ~ / .gvfs. Возможно, вы можете просто использовать open на пути, как вы видите его в ~ / .gvfs.

0 голосов
/ 10 марта 2010

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

И затем вы можете выполнить процесс и передать нужную папку в качестве аргумента (smb: // machine1 / folder /).

Например, для Windows вы должны сделать:

execl("explorer.exe", "D:")

Попробуйте найти путь к вашему файловому браузеру (чаще всего это Наутилус).

Итак:

execl("/bin/nautilus", "smb://.../")

Некоторая информация о execl

...