es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

sys.argv está dividiendo la ruta si es demasiado larga, ¿cómo puedo evitar que lo haga?

Python 3.9, Windows 10

Entonces, tengo un script de Python que acepta archivos arrastrados sobre él, lo que hace con los archivos no debería ser relevante.
Todo funciona bien, excepto en los casos inusuales en los que la ruta del archivo resulta ser más larga que el límite de ruta de 260(?) caracteres o aproximadamente 257 caracteres (según lo contado en SublimeText). Y sí, tengo habilitadas las ‘rutas largas’ en Windows (‘LongPathsEnabled’=1 en el registro).

Así que para ilustrar (las rutas reales, por supuesto, son mucho más largas)
El archivo que se arrastra tiene la ruta 'x:\folder\folder 2\nombrearchivo.file', sys.argv tiene correctamente dos argumentos ['pythonfile.py', 'x:\folder\folder 2\nombrearchivo.file']

Si en cambio está en 'x:\folder\folder 2\folder 3\nombrearchivo.file' (superando el límite de ruta evidente en el mundo real), entonces sys.argv se convierte en 4 argumentos, separados por los espacios en blanco, de la siguiente manera: ['pythonfile.py', 'x:\folder\folder', '2\folder', '3\nombrearchivo.file']

Entonces, el script falla porque sys.argv[1] no es un archivo, sino solo la primera parte de la ruta.

Entonces, ¿qué hacer? La única información relevante que encontré fue dejar que el instalador de Python elimine el límite de ruta, lo cual ya hice. De lo contrario, no pude encontrar ni una sola mención de nada que se parezca a este problema ni cómo trabajar en torno a él.

Como solución de respaldo, podría reconstruir la ruta cuando esto suceda, pero debe poder manejar varios archivos y no estoy seguro de una forma sensata de verificar si son una multitud de argumentos debido a esto o si realmente son múltiples archivos. Sería un dolor de cabeza para algo que no debería suceder en primer lugar…

El código de prueba es import sys, os;
print(sys.argv);
os.system("pause")

Es solo un archivo de Python básico, los archivos se arrastran sobre él, nada más en medio, antes o después. Si la ruta de los archivos, incluido el nombre de archivo+extensión, es más larga que 257 caracteres, lo que normalmente sería un solo argumento se divide y se convierte en múltiples usando los espacios como delimitador.

Sin otras importaciones, nada externo, solo el comportamiento básico de Python en Windows. Lo que solo hace más frustrante que sea imposible encontrar NADA al respecto que pueda ayudar.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para manejar rutas de archivo largas en PythonScript en Windows 10

    Si tienes un script de Python que acepta archivos arrastrados sobre él y enfrentas problemas cuando la ruta del archivo supera los 257 caracteres, hay algunas soluciones potenciales que puedes probar:

    1. Habilitar ‘LongPathsEnabled’ en el registro de Windows: Esto deberá hacerse antes de ejecutar el script y requiere privilegios de administrador. Esto debería permitir que las rutas de archivo más largas que 260 caracteres sean manejadas por el script.
    2. Usar el módulo ‘os.path’ incorporado: Este módulo proporciona mucha funcionalidad relacionada con las rutas de archivo y puede usarse para solucionar las limitaciones del límite de ruta de archivo de Windows 10.

    3. Usar una biblioteca de terceros como ‘pathlib’: Esta biblioteca también puede usarse para trabajar con rutas de archivo y proporciona mucha funcionalidad útil para manejar operaciones relacionadas con las rutas eficientemente.

    4. Modificar el script para manejar rutas de archivo largas reensamblando la ruta: En caso de que la ruta del archivo supere los 257 caracteres, el script puede modificarse para manejar esto dividiendo la ruta en partes y volviéndola a ensamblar. Sin embargo, esta solución puede llevar tiempo y puede que no sea la mejor opción para manejar múltiples archivos simultáneamente.

    En general, se recomienda usar el módulo ‘os.path’ incorporado o una biblioteca de terceros como ‘pathlib’ para manejar las rutas de archivo en Windows 10, ya que estas soluciones están diseñadas para superar el límite de 260 caracteres y proporcionar formas más eficientes de manejar las rutas de archivo en Python.

Comments are closed.