ビデオゲームのフレームを記録するC++プログラムをいくつか呼び出す必要があります。私には約1800のテストゲームがあり、そのうちのいくつかは動作し、一部は動作しません。一定時間後にコマンドを停止し、その結果をBashに返します。
コンソールが動作しないと、セグメンテーションフォールトエラーが返されますが、動作するとウィンドウが開き、ゲームが再生され、同時にすべてのフレームが記録されます。
問題が解決しない場合、ゲームウィンドウを閉じるまでこのプロセスは終了しません。
私が持っているすべてのゲームをテストし、テキストファイルで動作するものの名前と、別のファイルで動作しないものの名前を書くBashスクリプトを作成する必要があります。私はtimeout
コマンドを使用して、これを試してみました瞬間のために
:
count=0
# Run for every file in the ROMS folder
for filename in ../ROMs/*.bin; do
# Increase the counter
((count++))
# Run the command with a timeout to prevent it from being infinite
timeout 5 ./doc/examples/videoRecordingExample "$filename"
# Check if execution succeeds/fails and print in a text file
if [ $? == 0 ]; then
echo "Game $count named $filename" >> successGames.txt
else
echo "Game $count named $filename" >> failedGames.txt
fi
done
それは同じファイル上のすべての名前を書き込みますので、しかし、それは、動作していないようです。これは、if
の中の条件が、C++プログラム自体の実行ではなく、タイムアウトを参照しているからです。
私はtimeout
を使わずに試してみましたが、ゲームがうまくいくと、手作業でウィンドウを閉じて、その結果が期待通りでした。私は10試合しか試してみませんでしたが、1800年に試してみると完全に自動である必要があります。
このプロセスを自動化する方法はありますか?執行を中止すると同時に、それが成功したかどうかを知るいくつかのコマンドのように?
おそらく 'timeout --signal 9 --preserve-status ...など'もっとうまくいくでしょうか? – agc