2015-02-23 52 views
3

我有一個python腳本,它通過搜索文件夾並拉取文件列表來建立文件。該文件運行良好和作品,當我打開並在怠速運轉預期,但如果當我在命令行窗口中運行腳本,我得到這個錯誤:Python腳本可以在從IDLE運行但不從命令行運行時看到Y:/ Drive

C:\Windows\system32>python "C:\Users\ntreanor\Documents\RV Scripts\Server RV Sequence.py" 
Traceback (most recent call last): 
    File "C:\Users\ntreanor\Documents\RV Scripts\Server RV Sequence.py", line 69, 
in <module> 
    for foldername in os.listdir(pngFolders): 
WindowsError: [Error 3] The system cannot find the path specified: 
    'Y:/20_temp_script_testing/pr126 movs\\04_comp_pngs/*.*' 

在情況下,它並不明顯,對路徑做存在。它不僅在IDLE中起作用,而且我重複檢查並且路徑肯定存在。

我還試圖創建具有作爲後臺進程運行的腳本文件夾,並得到了類似的結果

Traceback (most recent call last): 
    File "D:\shotgun\shotgunEventDaemon.py", line 888, in process 
    self._callback(self._shotgun, self._logger, event, self._args) 
    File "D:\shotgun\plugins\CreateAssetFolders.py", line 72, in createAssetFolders 
    os.makedirs(folder) 
    File "D:\Python27\Lib\os.py", line 150, in makedirs 
    makedirs(head, mode) 
    File "D:\Python27\Lib\os.py", line 150, in makedirs 
    makedirs(head, mode) 
    File "D:\Python27\Lib\os.py", line 150, in makedirs 
    makedirs(head, mode) 
    File "D:\Python27\Lib\os.py", line 157, in makedirs 
    mkdir(name, mode) 
WindowsError: [Error 3] The system cannot find the path specified: 'Y:/' 

這是腳本記錄什麼的文件夾之前正確的:

Making folder: 
Y:/07_design/04_environmental_elements\eec005-08_insect_ladybird_red_7_spots_wide 

(它說Y而不是整個路徑的原因是它試圖恢復每個文件夾,直到它不能再返回,並且這是拋出異常時)

Ar e命令行窗口的環境變量以某種方式影響應該將腳本指向正確位置的驅動器映射?

+1

您是否注意到您在文件名中混合了'/'和\? – 2015-02-23 12:09:24

+0

/和\\的混合可以正常工作,如果在Linux上有代碼運行的遠程機會,則建議使用athoug。如果你不這樣做,那麼你把代碼拿到* NIX的那一天就會變得一團糟。它給了他麻煩。 – bconstanzo 2015-02-23 12:38:31

+0

我做到了,是的。目前,我正在聲明基本路徑(因爲這只是測試),然後使用os.path.join創建其他文件夾,所以join方法是放在'\\'中的。 – SuperBiasedMan 2015-02-23 13:01:05

回答

3

問題可能是因爲IDLE和您的命令行使用不同級別的權限運行。映射網絡驅動器不會自動適用於所有用戶上下文。在這個here有一個超級用戶的問題,並且大量的other資源涉及這個主題。簡而言之,映射的網絡驅動器僅適用於在映射所在的級別上運行的程序。

如果您已通過Windows UI映射網絡驅動器,則它將映射爲未升級的程序。但是,如果它被映射到net use那麼它在映射完成時取決於命令提示符的級別!

禁用UAC也會影響更改此行爲,如使用提升(或不提示)命令提示符,這可能解釋爲什麼某些PC顯示不同的行爲。

+0

感謝您的回覆,我會看看進去。你認爲有一種方法可以通過編程實現嗎?如果能夠以某種方式在腳本內部解決它會更容易,但我意識到這可能是一個不合理的希望。 – SuperBiasedMan 2015-06-05 14:53:15

+0

@SuperBiasedMan這是否最終解決了您的問題?您當然可以以編程方式映射網絡驅動器。查看[this](http://stackoverflow.com/q/1271317/1994235)問題的許多答案。 – 2015-06-09 04:18:12

+0

我不得不在服務器上做任何事情之前與我們的IT人員交談,所以我沒有真正解決問題,但我仍然將您的問題標記爲已接受,因爲它解釋了問題的根源,謝謝! – SuperBiasedMan 2015-06-09 13:57:47

-1

我認爲你的問題是你試圖打開*文件,這當然不存在。打開(路徑)將路徑作爲文字字符串並且不會翻譯它,所以它期望該值是有效的文件名。你應該改變你的代碼來獲取一個目錄而不是一個文件,然後走這個目錄。

+0

我實際上並沒有將它指定爲文件,我使用os.listdir函數進行循環,如下所示: for os.listdir(folders)中的foldername: – SuperBiasedMan 2015-02-23 12:59:22

相關問題