Я хочу создать символические ссылки для каждого файла во вложенной структуре каталогов, где все символические ссылки будут помещены в одну большую плоскую папку и теперь имеют следующий код:
# 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 символических ссылок.
Программа все еще работает, но новые выходные данные не генерируются.Он создал 9 символических ссылок для некоторых файлов в # tag & reencode
и первые три файла в папке ChillOutMix
.Окно cmd.exe все еще открыто и пусто, и в строке заголовка отображается, что в данный момент он обрабатывает команду mklink для третьего файла в ChillOutMix
.
Я пытался вставить time.sleep(2)
послеcmdprocess.stdin.write
в случае, если Python слишком быстр для процесса cmd, но это не помогает.
Кто-нибудь знает, в чем может быть проблема?