我想在一個嵌套的目錄結構,其中所有的符號鏈接將被放置在一個大平面文件夾中的每個文件創建符號鏈接,並且有下面的代碼現在:的Python的Windows CMD mklink,停止工作,沒有錯誤消息
# loop over directory structure:
# for all items in current directory,
# if item is directory, recurse into it;
# else it's a file, then create a symlink for it
def makelinks(folder, targetfolder, cmdprocess = None):
if not cmdprocess:
cmdprocess = subprocess.Popen("cmd",
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
print(folder)
for name in os.listdir(folder):
fullname = os.path.join(folder, name)
if os.path.isdir(fullname):
makelinks(fullname, targetfolder, cmdprocess)
else:
makelink(fullname, targetfolder, cmdprocess)
#for a given file, create one symlink in the target folder
def makelink(fullname, targetfolder, cmdprocess):
linkname = os.path.join(targetfolder, re.sub(r"[\/\\\:\*\?\"\<\>\|]", "-", fullname))
if not os.path.exists(linkname):
try:
os.remove(linkname)
print("Invalid symlink removed:", linkname)
except: pass
if not os.path.exists(linkname):
cmdprocess.stdin.write("mklink " + linkname + " " + fullname + "\r\n")
所以這是一個自頂向下的遞歸,首先打印文件夾名稱,然後處理子目錄。如果我現在通過某個文件夾運行它,整個事情只會在10個符號鏈接之後停止。
該程序似乎仍然運行,但沒有生成新的輸出。它爲# tag & reencode
中的某些文件和ChillOutMix
文件夾中的前三個文件創建了9個符號鏈接。 cmd.exe窗口仍然打開併爲空,並在其標題欄中顯示它正在處理ChillOutMix
中第三個文件的mklink命令。
我試圖在每個cmdprocess.stdin.write
之後插入一個time.sleep(2)
以防Python對於cmd進程太快,但它沒有幫助。
有誰知道這個問題可能是什麼?
這不是真的與你的問題有關,但你有沒有考慮過使用'os.walk()'而不是遞歸?這可能會更簡單。 – Velociraptors 2011-03-10 05:51:12