2016-07-06 2 views
1

Ich habe ein Python-Skript, das als Eingabe ~ 20 Argumente benötigt. Ich möchte dieses Skript mehrmals mit verschiedenen Werten für die Argumente jedes Mal ausführen. Im Moment benutze ich einen grundlegenden Bash-Skript wie folgt aus (mit mehr Parametern und mehr unterschiedlichen Werten für jeden Parameter)Optimale Möglichkeit, ein Python-Skript mehrere Male mit verschiedenen Argumentwerten auszuführen

for com_adv_par18 in 0.288 0.289 
do 
    for com_adv_par19 in 0.288 0.289 
    do 
    for com_adv_par20 in 0.288 0.289 
    do 
    python alpha2.py $com_adv_par18 $com_adv_par19 $com_adv_par20 
    done 
    done 
done 

ich aber bin beunruhigend, dass dies nicht der optimalste Weg, es zu tun. Sowohl Kodierung als auch Rechenzeit. Können Sie eine alternative Methode zum Einfügen der Parameter vorschlagen und das Programm effizienter ausführen?

Vielen Dank im Voraus.

+0

Warum importieren Sie nicht einfach das Skript und führen die 'main' Funktion (wie immer es heißt) wiederholt mit den gegebenen Parametern aus? Beachten Sie, dass Ihre Bash-Schleife sequenziell arbeitet. – MisterMiyagi

Antwort

1

Die Antwort auf Ihre Frage hängt von vielen Dingen ab - ein wichtiger Faktor ist die Länge der Zeit, die jede Ausführung dauert.

Wenn Sie den alpha2.py Skript Refactoring, so dass Sie es import können, dann könnte man eine Python-Wrapper-Skript entlang dieser Linien verwenden:

from alpha2 import do_something 
from itertools import product 

# define argument lists here, e.g. list1 = [0.288, 0.289], etc. 

for args in product(list1, list2, list3): 
    do_something(*args) 

Jede Ausführung noch sequenziellen sein wird, aber der Vorteil dieses Ansatzes ist, dass Sie nicht den Aufwand für das Laden einer neuen Python-Instanz für jede Kombination von Parametern erleiden müssen.

+0

Danke, das scheint genau das zu sein, was ich will. Jede Ausführung benötigt nicht viel Zeit, daher ist es in Ordnung, sie sequenziell auszuführen. Die gesamte Ausführungszeit ist drastisch gesunken. Auch die Eingabeargumente sind leicht zu manipulieren. –

Verwandte Themen