Saltar al contenido

Cómo usar el comando mv en Python con subproceso

Solución:

si llama al subproceso de esa manera:

subprocess.call(["mv", "/home/somedir/subdir/*", "somedir/"])

en realidad estás dando el argumento /home/somedir/subdir/* al mv comando, con un real * expediente. es decir, estás intentando mover el * expediente.

subprocess.call("mv /home/somedir/subdir/* somedir/", shell=True)

usará el shell que expandirá el primer argumento.

Nota Bene: cuando se usa el shell=True argumento que necesita para cambiar su lista de argumentos en una cadena que se le dará al shell.

Insinuación: También puede utilizar el os.rename() o shutil.move() funciones, junto con os.path.walk() o os.listdir() para mover los archivos al destino de una manera más pitónica.

Puede resolver esto agregando el parámetro shell=True, para tener en cuenta los comodines en su caso (y así escribir el comando directamente, sin ninguna lista):

subprocess.call("mv /home/somedir/subdir/* somedir/", shell=True)

Sin ella, el argumento se da directamente a la mv comando con el asterisco. Es el trabajo de shell devolver todos los archivos que coinciden con el patrón en general.

Estás usando shell globbing *, y esperando el mv comando para saber lo que significa. Puede obtener el mismo error de un shell de comandos de esta manera:

$ mv 'somedir/subdir/*' ...

Observe las comillas. El caparazón generalmente hace una comparación global en * para usted, pero los comandos no hacen eso en sus líneas de comando; ni siquiera un caparazón lo hace. Hay una función de biblioteca de C llamada fnmatch que hace globbing al estilo shell por usted, que cada lenguaje de programación copia más o menos. Incluso podría tener el mismo nombre en Python. O podría tener la palabra “glob”; No recuerdo

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *