GNU/Linux >> Tutoriales Linux >  >> Linux

Ejecución de comandos de terminal de bucle en Jupyter

Una posible solución pirateada podría ser usar eval y deja que bash ejecute una cadena.

for idx in range(10):
    !eval {"python process.py --filename /Users/images/{image}.jpg".format(image=idx)}

Usa el glob módulo y tal vez subprocess en lugar de ! . Un simple glob.glob("path/*.jpg") te permitirá iterar sobre todas las imágenes.

from glob import glob
from subprocess import check_call

for i in glob("/Users/images/*.jpg"):
    print("Processing:", i)
    check_call(["python", "process.py", "--filename", i], shell=False)

Usando ! o eval nunca es una buena idea:el comando puede fallar silenciosamente.


El ! simplemente indica que se ejecutará el siguiente código en la terminal.

Entonces, una opción es simplemente codificar su declaración en bash. No es tan fácil como Python, pero puedes realizar la misma tarea así:

! for file in /Users/images/*.jpg; do python process.py --filename /Users/images/$i; done

Es un bucle for, pero no un bucle for de Python.

Alternativamente, considere volver al código fuente de process.py y modificarlo para que recorra los archivos en un directorio. Esto se puede hacer fácilmente con el os.listdir función.


No hay necesidad de subproceso o formato. Algo tan simple como:

for idx in range(10):
    !python process.py --filename /Users/images/{idx}.jpg

funciona para mí.


Linux
  1. Hoja de trucos para los comandos comunes de Linux

  2. 8 comandos de Linux para una gestión de procesos eficaz

  3. Bash For Loop Guía y ejemplos

  4. Exponiendo python jupyter en LAN

  5. Bucle for anidado

14 peligrosos comandos de terminal de Linux

Golpe para bucle

Los 20 mejores comandos de terminal de Linux para probar un principiante

Accesos directos para navegar por el historial de la terminal

Undistract-me:Reciba una notificación cuando se completen los comandos de terminal de ejecución prolongada

Docker Exec:su comando Goto para ejecutar comandos en Docker