インタラクティブプログラムstdinとstdout(ゲームをプレイするためのボットプログラムを作成)

インタラクティブプログラムstdinとstdout(ゲームをプレイするためのボットプログラムを作成)

設定: ソースコードがないため、「編集できない」実行可能ファイルがあります。プログラムを実行すると、計算する数値を提供するゲームが表示され、stdout計算が終わったら答えを提供でき、stdin計算が正しいかどうかを知らせます。その後、新しい計算を受け、すべてが繰り返されます。

質問: このゲームは手動でプレイできますが、プログラムで自動化したいと思います。システムで使用できるツールはBashと ですC-compiler。このプログラムと対話する最も簡単な方法は何ですか?

これまで私がしたこと: 私はパイプを見て、Cプロセスを分岐し、パイプを使って2つのプロセス間で通信する小さなプログラムを実行しました。 (このようなプログラム)。しかし、子プロセスで外部バイナリを呼び出すと、動作させることはできません。

答え1

パイプとFIFOを使用してこれを行うことができます。

たとえば、これは私のテストスクリプトですblackbox.sh

#!/bin/bash

# Here i output the value to be added.
echo "10 30"

# Here i read the result and depending on it, write good or not good in a file
read result
if [ "${result}" -eq 40 ]; then
    echo good > result.txt
else
    echo not good > result.txt
fi

手動で実行:

$ ./blackbox.sh 
10 30 <~~~~ Script output
40 <~~~~~~~ My input
$ cat result.txt 
good
$ 

mkfifo coin次に、次の行を使用してFIFOを作成して再実行します。

$ rm result.txt && cat coin |./blackbox.sh | ( read a b ; echo $((a+b)) > coin )
$ cat result.txt 
good

気づく:

  • FIFO が読み取り用に開かない限り、FIFO へのすべての書き込みはブロックされます。
  • 明らかに'sの出力をblackbox.sh何かにパイプすると、それは見えなくなります。
  • blackbox.shの出力を簡単に解析できる簡単な例を選択しました。必要に応じて調整できます。
  • $(( ))Bashで算術演算を許可します。

関連情報