Solusi peretasan yang mungkin adalah menggunakan eval
dan biarkan bash mengeksekusi string.
for idx in range(10):
!eval {"python process.py --filename /Users/images/{image}.jpg".format(image=idx)}
Gunakan glob
modul dan mungkin subprocess
bukannya !
. Sebuah glob.glob("path/*.jpg")
sederhana akan membiarkan Anda mengulangi semua gambar.
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)
Menggunakan !
atau eval
bukanlah ide yang baik - perintah mungkin gagal secara diam-diam.
!
hanya menunjukkan bahwa kode berikut akan dieksekusi di terminal.
Jadi salah satu opsinya adalah mengkodekan pernyataan Anda di bash. Ini tidak semudah Python, tetapi Anda dapat menyelesaikan tugas yang sama seperti ini:
! for file in /Users/images/*.jpg; do python process.py --filename /Users/images/$i; done
Ini adalah for loop, tapi bukan Python for loop.
Sebagai alternatif, pertimbangkan untuk kembali ke kode sumber process.py
dan memodifikasinya sehingga akan mengulang melalui file dalam direktori. Ini dapat dilakukan dengan cukup mudah dengan os.listdir
fungsi.
Tidak perlu subproses atau format. Sesuatu yang sederhana seperti:
for idx in range(10):
!python process.py --filename /Users/images/{idx}.jpg
bekerja untuk saya.