Python
シェルスクリプト

シェルで生成した外部入力をpythonスクリプトに読ませて実行する

必要に迫られてあれこれ試行錯誤した結果,以下の方法でできるらしいことが判明.

Pythonコードの例

例として,読み込んだ外部入力の数字の2乗を返すコード:

example.py
print "input:"
i=raw_input(">> ")
i=float(i)
print i**2
quit()

シェルスクリプトの書き方

forで異なる外部変数を与えるようにしてみる:
※事前にexpectを

apt-get install expect

でインストールしておくこと.

test.sh
#/bin/sh
for itera 1 2 3 4 5
do
expect -c "
        set timeout -1
        spawn python example.py
        expect \">>\"
        send \"${itera}\n\"
        expect \"hoge\"
"
done

実行結果

あまり腑に落ちていないが,とりあえず上手くいっているようである.

spawn python example.py
input:
>> 1
1.0
spawn python example.py
input:
>> 2
4.0
spawn python example.py
input:
>> 3
9.0
spawn python example.py
input:
>> 4
16.0
spawn python example.py
input:
>> 5
25.0

コツとしては,シェルスクリプト内expectの中身の最後に

expect \"hoge\"

みたいな(一見意味のない)やつを噛ませると上手くいく.これが無いと何故か上手くいかなかった.