Skip to content

Commit 5947e71

Browse files
committed
fix: perft wrapper script now closes subprocess's stdin & stdout when terminating
1 parent ea271f3 commit 5947e71

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

tests/perft/perft.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,32 +80,41 @@ def __init__(self, engine_path: Path, pos_fen: str):
8080
text=True,
8181
)
8282

83-
self.engine.stdin.write("uci\n")
83+
self.send_command("uci")
8484

8585
# skip greeting & info/options output
8686
for line in self.engine.stdout:
8787
if line.strip() == "uciok":
8888
break
8989

90-
self.engine.stdin.write("ucinewgame\n")
91-
self.engine.stdin.write("isready\n")
90+
self.send_command("ucinewgame")
91+
self.send_command("isready")
9292

93-
self.engine.stdout.readline() # "readyok" response
93+
self.readline() # "readyok" response
9494

95-
self.engine.stdin.write(f"position fen {pos_fen}\n")
95+
self.send_command(f"position fen {pos_fen}")
96+
97+
def send_command(self, command):
98+
self.engine.stdin.write(f"{command}\n")
99+
self.engine.stdin.flush()
100+
101+
def readline(self):
102+
return self.engine.stdout.readline()
96103

97104
def run_perft(self, depth: int) -> dict[str, int]:
98-
self.engine.stdin.write(f"perft {depth} json\n")
105+
self.send_command(f"perft {depth} json")
99106

100-
# info line
101-
self.engine.stdout.readline()
107+
self.readline() # info line
102108

103-
return json.loads(self.engine.stdout.readline())
109+
return json.loads(self.readline())
104110

105111
def __del__(self):
106-
self.engine.communicate("quit\n", timeout=15)
107-
self.engine.kill()
108-
self.engine.communicate()
112+
self.send_command("quit")
113+
114+
if self.engine:
115+
self.engine.stdin.close()
116+
self.engine.stdout.close()
117+
self.engine.wait()
109118

110119

111120
#

0 commit comments

Comments
 (0)