2014-09-24 75 views
0

我有一個ArcPy腳本,它在IDLE中運行時工作,但在作爲計劃任務運行時失敗。這是問題部分:os.makedirs在IDLE中運行,在計劃任務中失敗

outPath = os.path.abspath(r"X:\GroupDirs\0731\GIS_CORE\PUPS") 
log.write("Output path: {}\n".format(outPath)) 
try: 
    outDir = os.path.join(outPath, "utiliquest{}".format(date)) 
    if not os.path.exists(outDir): 
     os.makedirs(outDir) 
    log.write("Created scratch and output") 
except: 
    fail_log(log) 

當我在IDLE中運行它,它會正確輸出,使目錄,並繼續執行。

Output path: X:\GroupDirs\0731\GIS_CORE\PUPS 
Created scratch and output 

在運行此作爲計劃任務,日誌文件具有正確的目錄,但os.makedirs(outDir)命令無法執行:

Output path: X:\GroupDirs\0731\GIS_CORE\PUPS 

    Failed at 09/24/14 14:41:45 
PYTHON ERRORS: 
Traceback info: 
    File "C:\Batch Processes\IRTHnet\Batch_CopyData.py", line 64, in <module> 
    os.makedirs(outDir) 

Error Info: 
[Error 3] The system cannot find the path specified: 'X:\\' 

這是正在同一臺計算機上運行每次,所以X驅動器指向相同的位置。

爲什麼這會導致失敗,我能做些什麼來修復/規避?

回答

0

這是每次都在同一臺機器上運行,所以X驅動器指向相同的位置。

這並不遵循。驅動器映射是每個會話。如果您在登錄時設置了Window來恢復驅動器映射(這是大多數人的做法,至少在XP到7中,在Explorer中的「映射驅動器」對話框中有一個「在登錄時重新連接」複選框),然後X驅動器不會指向相同的位置,除非您已經以同一用戶身份登錄。

可以設置將在啓動而不是登錄時重新連接系統範圍內的驅動器映射,但是這是不平凡的(並且可能在不同的Windows版本不同),而且還導致了一個爛攤子權限問題,你真的不想處理。

請參閱Services and Redirected Drives在MSDN,這不是直接你在這裏要做什麼,但確實很好地解釋問題,並鏈接到很多其他有用的文檔。

另一種解決方案是使用UNC路徑,如r'\\Server\share\GroupDirs\0731\GIS_CORE\PUPS'。這不是總是合適(例如,您可能希望在不同的計算機上安裝不同的共享到X:,並且您的腳本始終使用掛載到X:的任何一個),但是當它是時,通常是最簡單的。

+0

公司的政策是'X:'驅動器對於所有用戶來說總是'X:',但是「除非你以同一用戶身份登錄」纔是關鍵 - 計劃任務已經設置爲在沒有該驅動器權限的用戶下運行。謝謝! – Erica 2014-09-26 11:30:20