2016-04-09 15 views
1

ビデオゲームのフレームを記録する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年に試してみると完全に自動である必要があります。

このプロセスを自動化する方法はありますか?執行を中止すると同時に、それが成功したかどうかを知るいくつかのコマンドのように?

+0

おそらく 'timeout --signal 9 --preserve-status ...など'もっとうまくいくでしょうか? – agc

答えて

0

代わりの

timeout 5 ./doc/examples/videoRecordingExample "$filename" 

あなたはこの試みることができる:タイムアウトコード内の引数

./doc/examples/videoRecordingExample "$filename" && sleep 5 && pkill videoRecordingExample 
+0

私はこれを今試しましたが、それはちょっと変わっています。なぜなら今でも手動でゲームウィンドウを閉じる必要がありますが、次のゲームを試すのに5秒間待つからです。 –

0

スワップ。それは次のようになります。

timeout 5 "$filename" ./doc/examples/videoRecordingExample 

理由:タイムアウトの構文は次のとおりです。

タイムアウト[OPTION] DURATIONコマンド[ARG] ...

だから、COMMANDがあるべきDURATIONの直後です。上記のコードでは、おそらく実行不可能なファイルvideoRecordingExampleがCOMMANDになり、毎回エラーが返されます。

+0

ファイルvideoRecordingExampleはうまく動作し、私のために働いていますが、それは本当に問題ではないと思います...問題は、次のゲームに行きたい場合は手動でウィンドウを閉じる必要がありますそれがすべて自動であることを望みます。また、 "$ filename"はC++プログラムの入力パラメータです。 –

+0

@MartaSampietro、あなたは* videoRecordingExample *は実行可能ファイルのC++プログラムだと言っていますか?それは 'doc'サブフォルダにあるので、それは明白ではありません。 – agc

+0

うん、それは動作し、それはdoc/examplesサブフォルダの中にあります。申し訳ありませんが、私はポストでうまく説明していないが、ええ、プログラムは正常に動作し、私が持っている唯一の問題は、実行を自動的に中止し、その状態を知る方法がわからないということです。ゲームはC++プログラムで動作し、ゲームでは動作しません。 –

関連する問題