2013-04-10 60 views
3

我有一個驅動器已映射到指定的字母'R:\'。如果我運行python腳本訪問這個空間,而登錄或解鎖計算機,它工作正常。當我設置任務計劃程序在我進來之前的早上運行腳本時,會出現問題。基本上,我保持登錄狀態並鎖定計算機,但在某些時候,看起來像我的網絡驅動器映射超時(但在解鎖時重新連接早上的機器),這就是腳本無法找到它們的原因。如何在Python中刷新網絡驅動器映射

嘗試執行os.path.exists()以檢查此驅動器上的文件夾並在它們不存在時創建它們時出現此錯誤。在'try/except'循環中,我得到了一個例外:「系統找不到指定的路徑:'R:\'。

我的問題:有沒有辦法強制通過python進行刷新?關於映射網絡驅動器...但不知道這是否適用於我的情況,因爲我已經映射了驅動器,它使用的字母需要保持不變,因爲不同的應用程序有絕對引用它。問題或不工作,也不想臨時映射到一個腳本和取消映射完成後的另一封信......似乎是一種低效的方式做到這一點?

使用Python 2.6(什麼其他程序需要)。

謝謝,

+0

你確定這是一個python問題,而不是你如何設置計劃任務的問題?假設您正在使用Windows,您是否可以確認您已將任務設置爲使用您的憑據並「以最高權限運行」? – Brad 2013-04-10 12:42:22

回答

1

最好的解決方案是通過其UNC路徑名引用「驅動器」,即形式爲\\hostname\sharename的路徑,但不幸的是,Python的基礎庫對處理UNC路徑的支持很差。

選項#1將找到一個Python擴展模塊,您可以安裝它來更好地支持UNC路徑。嘗試谷歌搜索「python unc」。

選項#2將使用Python subprocess模塊執行net use命令,並解析結果輸出。例如在DOS提示符下,運行net use將輸出這樣的事情...

Status  Local  Remote     Network 
------------------------------------------------------------------------------- 
OK   R:  \\hostname\sharename  Microsoft Windows Network 

...你可以用它來告訴我們,如果驅動器已被映射,如果沒有,你可以執行net use R: \\hostname\sharename映射它。如果沒有參數,調用net use就可能'刷新'映射,如果'超時',但我不確定。

選項3將調查使用Python ctypes模塊直接調用基礎Windows庫以模擬調用net use的功能。

0

我對這個問題的解決方案是隻使用引用機器的IP地址。工作像一個魅力和映射驅動器沒有問題......感謝您的答覆。

相關問題