我想在一个嵌套的目录结构,其中所有的符号链接将被放置在一个大平面文件夹中的每个文件创建符号链接,并且有下面的代码现在:的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