Как выполнить репликацию команды subst окна в Python?
-
12-12-2019 - |
Вопрос
Я пытаюсь подключить виртуальный диск к настройкам Windows, одному из инструментов, которые я использую, не нравятся пробелы в именах файлов.
В командной строке я бы сделал следующее
subst l: "c:\Program Files\Complier\version 6.0\bin"
Я пытался воспроизвести эту функциональность в Python, но безуспешно.Я начал использовать os.execl()
выполнить subst
команду напрямую, но это сообщило об ошибке недопустимого параметра.
Некоторые другие решения SO предлагают использовать Win32API напрямую.
Кстати, я использую Python 2.7.3 в Windows.
Решение
Вы можете напрямую вызвать Windows API.Обратите внимание, что здесь вам нужно передавать строки Юникода или вы можете установить типы аргументов для функции, чтобы обеспечить типобезопасное поведение.
from ctypes import windll, c_int, c_wchar_p
DefineDosDevice = windll.kernel32.DefineDosDeviceW
DefineDosDevice.argtypes = [ c_int, c_wchar_p, c_wchar_p ]
# Create a subst. Check the return for non-zero to mean success
if DefineDosDevice(0, "T:", "C:\\Temp") == 0:
raise RuntimeError("Subst failed")
# Delete the subst.
if DefineDosDevice(2, "T:", "C:\\Temp") == 0:
raise RuntimeError("Couldn't remove subst")
Другие советы
В идеале вы должны использовать popen
и правильно приводить аргументы.Вы также можете попробовать усеченный путь C:\Progra~1
.