BashファイルからPythonスクリプトを複数回実行する

BashファイルからPythonスクリプトを複数回実行する

さまざまなパラメータを使用してPythonスクリプトを複数回実行したいと思います。これを行うには、次のbashスクリプトを作成しました。

requests=(25 50 75 100)
factors=(3 6)
graphsizes=(25 50 75)

for request in "${requests[@]}"; do
    for factor in "${factors[@]}"; do
        for size in "${graphsizes[@]}"; do
            echo "Now Running: n = ${request}, factor = ${factor}, size = ${size}" >> nohup.out;
            echo nohup python3 -u main.py "$request" 50 "$factor" "$size" > ${request}_${factor}_${size}.log &
            echo "Done Running: n = ${request}, factor = ${factor}, size = ${size}" >> nohup.out;
        done
    done
done

;echo並列に実行したくないので、最初と最後に追加しました。実際、私はPythonスクリプトへのすべての呼び出しがmain.py並列ではなく逐次実行されることを望んでいます。これは、スクリプト自体がすでに並列化されており、競合状態を必要としないためです。

;通常、タスクを順番に実行するためにaを使用していることはわかっていますが、&nohup行の後にこれを実行するとエラーが発生します。

syntax error near unexpected token `;'

ループの各反復を順次実行するにはどうすればよいですか?

ベストアンサー1

複数行でスクリプトを作成した方法では、「;」は改行文字として暗示されます。最も内側のループ内の3行の末尾にある ";"を削除すると、forスクリプトは順番に実行されます。 specとdo同じ行に項目​​を配置するときなど、項目間に区切り線が必要な同じ行に項目​​を移動する場合にのみ、 ';'が必要です。for以下の書き換えスクリプトの代替場所を参照してください。do

for request in "${requests[@]}" 
do
  for factor in "${factors[@]}"
  do
    for size in "${graphsizes[@]}"
    do
        echo "Now Running: n = ${request}, factor = ${factor}, size = ${size}" >> nohup.out
        echo nohup python3 -u main.py "$request" 50 "$factor" "$size" > ${request}_${factor}_${size}.log 
        echo "Done Running: n = ${request}, factor = ${factor}, size = ${size}" >> nohup.out
    done
  done
done

おすすめ記事