Retry enemizer up to 5 times, logging the error each time it fails. (#128)

* Retry enemizer up to 5 times, logging the error each time it fails.
This commit is contained in:
CaitSith2 2020-07-29 12:56:43 -07:00 committed by GitHub
parent daf4ac8117
commit c737408715
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 33 additions and 7 deletions

40
Rom.py
View File

@ -273,13 +273,39 @@ def patch_enemizer(world, player: int, rom: LocalRom, enemizercli, random_sprite
with open(options_path, 'w') as f:
json.dump(options, f)
subprocess.check_call([os.path.abspath(enemizercli),
'--rom', randopatch_path,
'--seed', str(world.rom_seeds[player].randint(0, 999999999)),
'--binary',
'--enemizer', options_path,
'--output', enemizer_output_path],
cwd=os.path.dirname(enemizercli))
max_enemizer_tries = 5
for i in range(max_enemizer_tries):
enemizer_seed = str(world.rom_seeds[player].randint(0, 999999999))
enemizer_command = [os.path.abspath(enemizercli),
'--rom', randopatch_path,
'--seed', enemizer_seed,
'--binary',
'--enemizer', options_path,
'--output', enemizer_output_path]
p_open = subprocess.Popen(enemizer_command,
cwd=os.path.dirname(enemizercli),
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True)
logging.info(f"Enemizer attempt {i + 1} of {max_enemizer_tries} for player {player} using enemizer seed {enemizer_seed}")
for stdout_line in iter(p_open.stdout.readline, ""):
logging.info(stdout_line.rstrip())
p_open.stdout.close()
return_code = p_open.wait()
if return_code:
if i == max_enemizer_tries-1:
raise subprocess.CalledProcessError(return_code, enemizer_command)
continue
for j in range(i+1, max_enemizer_tries):
world.rom_seeds[player].randint(0, 999999999)
# Sacrifice all remaining random numbers that would have been used for unused enemizer tries.
# This allows for future enemizer bug fixes to NOT affect the rest of the seed's randomness
break
rom.read_from_file(enemizer_output_path)
os.remove(enemizer_output_path)