Ejecutar un programa de Python desde un script shell
pasletempsdetrouverunpseudo
Mensajes publicados
4
Estado
Miembro
-
lEprofSonDkon Mensajes publicados 227 Estado Miembro -
lEprofSonDkon Mensajes publicados 227 Estado Miembro -
Hola a la comunidad,
Desde hace un tiempo tengo un problema que me parece diminuto, sin embargo no consigo encontrar soluciones a pesar de mis largas búsquedas (en foros, etc...). Hay que decir que estoy descubriendo los comandos de linux...
He hecho un programa en python que toma como entrada un archivo de datos .dat. Puedo ejecutarlo sin problemas en la consola con el comando "python3 mi_prgm.py nombre_de_mi_archivo.dat".
Ahora, necesito hacer un script shell (o un programa en python, pero he intentado mucho con el script shell) que ejecute mi primer programa tantas veces como archivos de datos que contengan la palabra "NOEUD" en el directorio actual.
Así es como se ve mi código:
for archivo in find -type f -name "NOEUD*.dat"/mi_directorio/*
do
python3 mi_prgm.py archivo
done
Esto genera el error:
FileNotFoundError: [Errno 2] No such file or directory: 'archivo'
Concretamente, tengo la impresión de que el programa de python se está lanzando correctamente, pero que su parámetro de entrada (que debe ser un archivo de datos .dat) no comprende que la variable "archivo" del script shell es un archivo. Y segundo problema, el mensaje de error aparece siempre 5 veces (como si el programa de python intentara lanzarse 5 veces), aunque no hay 5 archivos llamados "NOEUD*.dat"...
¡Gracias de antemano si alguien puede ayudarme!
Desde hace un tiempo tengo un problema que me parece diminuto, sin embargo no consigo encontrar soluciones a pesar de mis largas búsquedas (en foros, etc...). Hay que decir que estoy descubriendo los comandos de linux...
He hecho un programa en python que toma como entrada un archivo de datos .dat. Puedo ejecutarlo sin problemas en la consola con el comando "python3 mi_prgm.py nombre_de_mi_archivo.dat".
Ahora, necesito hacer un script shell (o un programa en python, pero he intentado mucho con el script shell) que ejecute mi primer programa tantas veces como archivos de datos que contengan la palabra "NOEUD" en el directorio actual.
Así es como se ve mi código:
for archivo in find -type f -name "NOEUD*.dat"/mi_directorio/*
do
python3 mi_prgm.py archivo
done
Esto genera el error:
FileNotFoundError: [Errno 2] No such file or directory: 'archivo'
Concretamente, tengo la impresión de que el programa de python se está lanzando correctamente, pero que su parámetro de entrada (que debe ser un archivo de datos .dat) no comprende que la variable "archivo" del script shell es un archivo. Y segundo problema, el mensaje de error aparece siempre 5 veces (como si el programa de python intentara lanzarse 5 veces), aunque no hay 5 archivos llamados "NOEUD*.dat"...
¡Gracias de antemano si alguien puede ayudarme!
4 respuestas
Hola,
Antes de lanzar cualquier cosa, generalmente comenzamos por ver qué podría dar un comando como respuesta…
Así que, personalmente, preferiría comenzar viendo qué me devuelve el comando (ver de paso el man find para la sintaxis correcta ;-\) :
Si la respuesta es concluyente, con los ejemplos al final del man find, intentaré incluir el programa en python…
--
Un pingüino en la banquisa.
Antes de lanzar cualquier cosa, generalmente comenzamos por ver qué podría dar un comando como respuesta…
Así que, personalmente, preferiría comenzar viendo qué me devuelve el comando (ver de paso el man find para la sintaxis correcta ;-\) :
find /mi_directorio/ -type f -name "NOEUD*.dat"
Si la respuesta es concluyente, con los ejemplos al final del man find, intentaré incluir el programa en python…
--
Un pingüino en la banquisa.
Al probar el comando que indicas, obtengo en retorno los 3 archivos que corresponden a la búsqueda, así que está muy bien, hasta aquí todo funciona correctamente.
Luego lo integro en el programa:
for archivo in find /mi_directorio/ -type f -name "NOEUD*.dat"
do
python3 mi_prgm.py archivo
done
Y ahí obtengo el mismo error... Pero esta vez aparece 6 veces y ya no 5 veces...
¿Podría ser que el problema provenga de mi bucle que escribo "for archivo in find ... ? Dado que el comando find ... devuelve el nombre de los archivos que corresponden a la consulta, me parecería posible...
Luego lo integro en el programa:
for archivo in find /mi_directorio/ -type f -name "NOEUD*.dat"
do
python3 mi_prgm.py archivo
done
Y ahí obtengo el mismo error... Pero esta vez aparece 6 veces y ya no 5 veces...
¿Podría ser que el problema provenga de mi bucle que escribo "for archivo in find ... ? Dado que el comando find ... devuelve el nombre de los archivos que corresponden a la consulta, me parecería posible...
Hola,
continúa en Python.
¿Eres capaz de escribir un script de Python que procese un archivo, pero no sabes cómo insertar un bucle para procesar varios?! 8O
Has hecho lo más difícil; la inserción de un bucle en un programa de Python me parece trivial.
pero no hago Python. :/
Y luego
continúa en Python.
¿Eres capaz de escribir un script de Python que procese un archivo, pero no sabes cómo insertar un bucle para procesar varios?! 8O
Has hecho lo más difícil; la inserción de un bucle en un programa de Python me parece trivial.
pero no hago Python. :/
Y luego
findpara encontrar archivos en el directorio actual es innecesario.
lEprofSonDkon, para ser honesto, primero intenté hacerlo en python, pero me encontré con problemas "sorprendentes" que me hicieron decidir escribirlo en un script shell. Y ahora, el script tiene literalmente 3 líneas, así que estoy convencido de que es realmente un problema aún más trivial que en python... Realmente me gustaría lograrlo en script shell... Pero, de hecho, si vuelvo a fallar, lo intentaré de nuevo con python.