Запускать команды Windows CMD через Python
Я хочу создать папку с символическими ссылками на все файлы в большой структуре каталогов. я использовал subprocess.call(["cmd", "/C", "mklink", linkname, filename])
сначала, и это сработало, но открыло новые командные окна для каждой символической ссылки.
Я не мог понять, как запустить команду в фоновом режиме без всплывающего окна, поэтому сейчас я пытаюсь оставить открытым одно окно CMD и запускать там команды через stdin:
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")
где
cmdprocess = subprocess.Popen("cmd",
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
Однако теперь я получаю эту ошибку:
File "mypythonfile.py", line 181, in makelink
cmdprocess.stdin.write("mklink " + linkname + " " + fullname + "\r\n")
TypeError: 'str' does not support the buffer interface
Что это значит и как я могу решить это?
1 ответ
Решение
Строки Python являются Unicode, но канал, в который вы пишете, поддерживает только байты. Пытаться:
cmdprocess.stdin.write(("mklink " + linkname + " " + fullname + "\r\n").encode("utf-8"))