
私はPythonとCで何度も実行する必要があるいくつかのコードを作成しました。各コードは新しい入力値のセットを使用して実行されます。そのために、さまざまな入力量に対してさまざまなプログラムを実行するUnixシェルスクリプトを作成しました。
#!/bin/sh
_file="${1:-/dev/null}"
while IFS=' ' read -r f1 f2 f3 f4
do
cd folder1
cd folder2
echo "$f1 $f2 $f3 $f4 " > inputs.txt
mpiexec -n 4 a_C_code
cd ..
cd ..
python3 python_code_1.py
python python_code_2.py
python python_code_3.py
python python_code_4.py
echo "$f1" #So I know how many times the loops has been performed
done < "$_file"
スクリプトで読み込むファイルの形式は次のとおりです。
1 2 3 4
5 6 7 8
...
ただし、プログラムを実行すると、最初の入力セット(この場合は1 2 3 4)のみが繰り返され、他のさまざまな入力グループに対してプログラムを実行せずに完了します。
答え1
シェルコードは大丈夫に見え、単純化されたテキストバージョンは期待どおりに機能します。
seq 12 | paste - - - - |
while IFS=' ' read -r f1 f2 f3 f4 ; do
echo "$f1 $f2 $f3 $f4 "
done
出力:
1 2 3 4
5 6 7 8
9 10 11 12
だからスチールドライバーのコメントこれは真であり、プログラムまたはmpiexec
プログラムのいずれかがpython
残りの入力行を消費するため、echo
2番目の入力行に到達できません。
たとえば、空腹のコマンドセットが追加された上記のコードを考えてみましょう。
seq 12 | paste - - - - |
while IFS=' ' read -r f1 f2 f3 f4 ; do
echo "$f1 $f2 $f3 $f4 "
(read x; read x; read x;)
done
出力(欠落行を参照):
1 2 3 4