Edited at

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

More than 1 year has passed since last update.

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


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\"

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