¿Cómo replicar el comando subst de Windows en Python?
-
12-12-2019 - |
Pregunta
Estoy intentando asignar una unidad virtual en la configuración de Windows. A una de las herramientas que estoy usando no le gustan los espacios en los nombres de archivos.
En la línea de comando, haría lo siguiente
subst l: "c:\Program Files\Complier\version 6.0\bin"
Intenté replicar la funcionalidad en Python sin éxito.comencé a usar os.execl()
para ejecutar el subst
comando directamente, pero eso informó un error de parámetro no válido.
Algunas de las otras soluciones en SO sugieren usar Win32API directamente.
Por cierto, estoy usando Python 2.7.3 en Windows.
Solución
Puede llamar a la API de Windows directamente.Tenga en cuenta que aquí debe pasar cadenas Unicode, o puede configurar argtypes en la función para obtener un comportamiento de tipo seguro.
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")
Otros consejos
Lo ideal sería utilizar popen
y citar los argumentos correctamente.También puedes probar la ruta truncada. C:\Progra~1
.