GNU/Linux >> Znalost Linux >  >> Linux

Spouštění pro příkazy terminálu smyčky v Jupyteru

Možným hackerským řešením by mohlo být použití eval a nechat bash spustit řetězec.

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

Použijte glob modul a možná subprocess místo ! . Jednoduchý glob.glob("path/*.jpg") vám umožní opakovat všechny obrázky.

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)

Pomocí ! nebo eval není nikdy dobrý nápad – příkaz může tiše selhat.


! jednoduše označuje, že následující kód bude spuštěn v terminálu.

Jednou z možností je tedy pouze kódovat váš příkaz v bash. Není to tak snadné jako Python, ale můžete provést stejný úkol, jako je tento:

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

Je to smyčka for, ale ne smyčka for Python.

Případně zvažte návrat ke zdrojovému kódu process.py a upravit jej tak, aby procházel soubory v adresáři. To lze snadno provést pomocí os.listdir funkce.


Není potřeba podproces nebo formát. Něco tak jednoduchého jako:

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

funguje pro mě.


Linux
  1. 8 Linuxových příkazů pro efektivní řízení procesů

  2. 10 Linuxových příkazů pro diagnostiku sítě

  3. Bash for smyčky Příklady

  1. Cheat sheet pro běžné linuxové příkazy

  2. Odhalení python jupyter na LAN

  3. Vnořená smyčka for

  1. Bash pro průvodce smyčkou a příklady

  2. Linux pro začátečníky:10 příkazů, které vám pomohou začít na terminálu

  3. Jak převést příkazy do libovolného terminálu?