2010-03-10 111 views
1

我使用Ubuntu的蟒蛇2.5,並且有一臺機器在同一網絡中的文件夾名爲machine1。該文件夾是共享的。打開Windows共享通過Linux機器

如何在該機器的特定文件夾中獲取文件?

我都試過了,沒有成功:

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

回答

3

Linux有一個叫做smbmount utiliy,可以在包裝smbutils我相信可以找到。

這是一個命令行實用程序,其安裝Windows共享到本地計算機上的目錄中,任選地與用戶名/密碼。

smbmount是,我相信它以root身份運行,所以無論是適合你,我不知道的工具。也許它可以用作用戶。

您可以在Linux機器上默認安裝共享,從而以本地文件的形式訪問它上的文件,也可以使用exec或類似的東西在python腳本中執行smbmount/smbumount。

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

用戶名和密碼可以寫在文件中以提高安全性。檢查man page

如果你需要的東西完全蟒蛇看看pysmb。條款谷歌是python,smb,CIFS。

+0

謝謝,我有這個解決方案。但我想在最後一種情況下使用它。不過謝謝。在最後一種情況下,我將在Windows(IIS)上安裝Web服務。 :( – bluefoot 2010-03-10 20:39:24

+0

還有http://pypi.python.org/pypi/PySmbClient在下面使用'smbclient'(與嘗試重新實現SMB/CIFS的pysmb不同)。 – ephemient 2010-03-10 23:00:41

-1

你應該尋找默認的文件瀏覽器。

然後你就可以執行過程,並通過你想作爲參數的文件夾中(SMB:// MACHINE1 /文件夾/)。

例如在Windows上,你會怎麼做:

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

試圖尋找路徑到您的文件瀏覽器(大多數是鸚鵡螺的時間)。

所以:

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

一些信息上execl

+0

好的,但...我想我沒有很清楚地解釋自己。我的python腳本在Ubuntu上運行,我只想獲得一個文件。在這個窗口機器中沒有服務。 – bluefoot 2010-03-10 20:37:39

+0

請用你的零件更新來更新你的問題。你想特別打開一個文件? – Snake 2010-03-15 09:10:16

1

urllib不理解SMB協議。您將需要通過pygobject使用gio才能檢索文件。

0

如果文件夾是共享的,我認爲它應該掛載在〜/ .gvfs中。也許你可以直接在路徑上使用open,就像你在〜/ .gvfs中看到的那樣。

+1

**如果**'gvfs-fuse-daemon'正在運行,並且** if **共享已在當前會話中掛載。你可以通過檢查'〜/ .gvfs'被掛載並運行'gvfs-mount'確保你能夠確保,但爲什麼不直接使用GIO呢? – ephemient 2010-03-10 22:57:16