Ich muss mehrere Aufrufe an ein C++ - Programm ausführen, das Frames aus einem Videospiel aufzeichnet. Ich habe ungefähr 1800 Testspiele, und einige von ihnen arbeiten und einige von ihnen nicht.Befehl nach einer bestimmten Zeit stoppen und das Ergebnis in Bash zurückgeben
Wenn sie nicht funktionieren, gibt die Konsole einen segmentation Fehler Fehler zurück, aber wenn sie funktionieren, öffnet das Programm ein Fenster und spielt das Spiel, und gleichzeitig zeichnet es jedes Bild auf.
Das Problem ist, dass, wenn es funktioniert, dieser Prozess nicht endet, bis Sie das Spielfenster schließen.
Ich muss ein Bash-Skript erstellen, das jedes Spiel testet, das ich habe und schreibe die Namen von denen, die in einer Textdatei funktionieren und die Namen derjenigen, die in einer anderen Datei nicht funktionieren.
Für den Moment, als ich mit dieser versucht haben, mit dem timeout
Befehl:
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
Aber es scheint nicht zu funktionieren, weil es alle Namen auf der gleichen Datei schreibt. Ich glaube, das liegt daran, dass die Bedingung innerhalb der if
auf das Timeout und nicht auf die Ausführung des C++ - Programms selbst verweist.
Dann versuchte ich ohne die timeout
und jedes Mal, wenn ein Spiel arbeitete, schloss ich manuell das Fenster, und dann war das Ergebnis das erwartete. Ich habe das mit nur 10 Spielen versucht, aber wenn ich es mit all den 1800 teste, müsste ich es komplett automatisch machen.
Also, gibt es eine Möglichkeit, diesen Prozess automatisch zu machen? Wie ein Befehl, um die Ausführung zu stoppen und gleichzeitig zu wissen, ob es erfolgreich war oder nicht?
Vielleicht 'Timeout - Signal 9 - Preserve-Status ... usw.' würde besser funktionieren? – agc