2011-03-09 16 views
5

Büyük bir dizin yapısındaki tüm dosyalara symlinks içeren bir klasör oluşturmak istiyorum. İlk önce subprocess.call(["cmd", "/C", "mklink", linkname, filename])'u kullandım ve işe yaradı, ancak her bir sembolik bağlantı için yeni bir komut penceresi açtı.Python aracılığıyla Windows CMD komutlarını çalıştırın

Ben yukarı doğru çıkan bir penceresiz arka planda komut çalıştırma çözemedim, bu yüzden şimdi açık bir CMD penceresini tutmaya çalışıyorum ve stdin yoluyla orada komutları çalıştırın:

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") 

File "mypythonfile.py", line 181, in makelink 
cmdprocess.stdin.write("mklink " + linkname + " " + fullname + "\r\n") 
TypeError: 'str' does not support the buffer interface 
ne demek

ve nasıl: nerede

cmdprocess = subprocess.Popen("cmd", 
           stdin = subprocess.PIPE, 
           stdout = subprocess.PIPE, 
           stderr = subprocess.PIPE) 

Ancak, ben şimdi bu hatayı alıyorum Bunu çözebilir miyim?

cevap

1

Python dizeleri Unicode'dir, ancak yazdığınız boru yalnızca baytları destekler. Deneyin:

cmdprocess.stdin.write(("mklink " + linkname + " " + fullname + "\r\n").encode("utf-8")) 
+0

Ah. Öyleydi, teşekkürler. Şimdi bu şey sadece 10 ya da daha fazla dosyadan sonra çalışmayı bırakıyor ... belki de bunun için bir şey biliyor musun? Http://stackoverflow.com/questions/5253835/yet-another-python-windows-cmd-mklink-problem-cant-get-it-to-work THX adresinden yeni bir soru sordum. –

İlgili konular