2014-06-18 102 views
1

在Windows 7 Pro中,我需要遍歷給定位置(在本例中爲Z:\)的目錄,並在每個使用Python執行命令提示符命令。這似乎應該是直接與os.walk(),但我迄今嘗試沒有任何工作 - 最近我得到的是無限循環從我的桌面(該腳本是下面)的命令。我需要做什麼來完成這項任務?在Python中遍歷目錄和執行命令提示符命令

import os 

for root, dirs, files in os.walk("Z:/"): 
    for dir in dirs: 
     os.system('cd Z:\\' + dir) 
     os.system('git init') 
     os.system('git add .') 
     os.system('git commit -m \"Initial\"') 
+2

首先,做使用os.system ('cd z:\\'+ dir)實際上不會改變你的工作目錄(它會改變它的命令,然後當這個命令結束時,你會回到你的起點。 chdir(dir)但我不完全確定chdir和愚蠢的古老驅動器字母是如何相互作用的 – Foon

回答

4

當您運行os.system('cd WHEREVER')要創建有自己的當前目錄的理念新的命令外殼。

當該shell退出時,父進程不保留子進程的當前目錄,以便後續os.system()調用在其當前目錄中看不到任何更改。

做到這一點,正確的做法是改變當前目錄中的過程(腳本),這將是繼承由子過程:

import os 

for root, dirs, files in os.walk("Z:/"): 
    for dir in dirs: 
     os.chdir('Z:\\' + dir) 
     os.system('git init') 
     os.system('git add .') 
     os.system('git commit -m \"Initial\"') 
+1

這是否需要一些'os.path.join'魔法?像'path = os.path.join('Z:\\', dir)'和'os.c hdir(路徑)'以確保它可以被Windows讀取?而且我會補充一點,他可以用'os.path.exists(path)'這樣包含一些測試。我正在評論澄清我自己;在Windows中的文件操作總是讓我。 – Engineero

+1

@Engineero同意使用'os.path。*'而不是僅僅使用glom字符串會是一個很好的跨平臺練習,但是我試圖對OP的代碼做最小的修改而不會陷入其他問題的問題。有問題的路徑必須存在,因爲'os.walk'告訴我們,除非在腳本運行時得到'rmdir''d ;-) –

+0

我看到了,感謝澄清並抱歉渾水。 – Engineero