Bir video oyunundan kareleri kaydeden bir C++ programına birkaç çağrı yürütmem gerekiyor. 1800 civarında test oyunum var, bazıları da çalışıyor ve bazıları değil.Belirli bir süre sonra komutu durdurun ve sonucunu Bash olarak geri döndürün
Çalışmıyorlarsa, konsol bir Segmentasyon hatası hatası döndürür, ancak iş yaparken program bir pencereyi açar ve oyunu oynatır ve aynı zamanda her kareyi kaydeder.
Sorun, işe yaradığında, oyun penceresini kapatana kadar bu işlem bitmez.
Sahip olduğum her oyunu test edecek ve bir metin dosyasında çalışanların isimlerini ve başka bir dosyada çalışmayanların adlarını yazacak bir Bash komut dosyası hazırlamalıyım. Ben timeout
komutunu kullanarak, bununla çalıştık an için
:
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
aynı dosya üzerinde bütün isimleri yazıyor çünkü Ama, çalışıyor gibi görünmüyor. Bunun nedeni, if
'daki koşulun, C++ programının kendisinin değil, zaman aşımına işaret etmesidir.
Daha sonra timeout
olmadan denedim ve bir oyun her çalıştığında, pencereyi elle kapattım ve sonuç beklenen oldu. Bunu sadece 10 oyunla denedim, ancak 1800'le test ettiğimde tamamen otomatik olması gerekiyordu.
Bu işlemi otomatik hale getirmenin herhangi bir yolu var mı? Yürütmeyi durdurmak ve aynı zamanda başarılı olup olmadığını bilmek için bazı komutlar gibi?
Belki 'timeout --signal 9 - koruma durumu ... vs.' Daha iyi çalışır mı? – agc