2012-10-04 105 views
0

這似乎是一個簡單的問題,但我很難搞清楚。在Python中訪問遠程服務器上的Windows共享驅動器

我在遠程服務器上設置了一個共享文件夾,以便該文件夾在Windows資源管理器中顯示如下:\\服務器名\共享目錄。我可以遠程從該文件夾讀取數據,並通過Windows資源管理器遠程寫入該文件夾。當我嘗試通過python腳本訪問該文件時,它說我的目錄不存在。

我有服務器的管理權限,並給我自己訪問共享驅動器(我通過Windows資源管理器複製文件來驗證這一點)。

在Python中,我訪問如下的驅動器(雖然我嘗試了幾種不同的方法,也沒有成功):什麼我可能是做錯了

os.access('\\\\server-name\\path-to-shared-directory', os.W_OK) 

有什麼建議?

編輯:

在回答問題時,我居然試圖複製使用腳本文件,os.access只是用來看看是否有目錄寫權限。我使用的複製代碼如下:

def copy_folder(src, dest): 
    if not os.access(dest, os.W_OK): 
     return(False) 
    cmd = ['xcopy', '/E', '/J', '/Y', '/I', src, dest] 

    p = subprocess.Popen(args=cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 

    out, err = p.communicate() 

    print 'out: %s' % out 
    print 'err: %s' % err 

    return(True) 

copy_folder(my_source_directory, '\\\\server-name\\path-to-shared-directory') 

這會返回'無效的驅動器規格'作爲錯誤。

+0

由於'os.access'返回'True'或'False',因此您發佈的代碼片段不太可能會告訴您該文件夾不存在。你能發佈真正的代碼和你得到的堆棧跟蹤嗎? – Pondlife

+0

**你得到了什麼錯誤信息?** – kindall

+0

你能分配一個盤符和'os.chdir'給共享嗎? – tMC

回答

1

你應該沒有問題,通過你已經嘗試使用UNC路徑訪問文件,但我會建議不同的格式有點幫助轉義:

src = r'C:\path\to\source' 
dest = r'\\server-name\path-to-shared-directory' 

而且你也不需要stdin

p = subprocess.Popen(cmd, 
     stdout=subprocess.PIPE, 
     stderr=subprocess.PIPE, 
     shell=True) 

通常你能夠使用正斜槓在蟒蛇的路徑,但是因爲你是在呼喚一個shell命令,仍需要反斜線。

+0

我嘗試將字符串轉換爲您建議的格式,但似乎無法正常工作。我懷疑它可能與Windows Share而不是Python有關? – Stuart

+0

您可以擴展「不工作」的部分嗎?什麼是錯誤?結果是什麼?如果你可以從資源管理器中的相同路徑訪問共享,我會假設它應該在同一臺機器上從你的python腳本運行。 – jdi

+0

對不起,我應該說,它給出了我的初始代碼相同的結果。這就是爲什麼我認爲它可能與Windows共享驅動器有關而不是python。 Windows資源管理器可以毫無問題地訪問文件。 – Stuart

相關問題