Compare commits

...

2 Commits

Author SHA1 Message Date
Mattéo Delabre cd6197caa3
Fight against zombies 2021-01-27 12:42:01 +01:00
Mattéo Delabre 30de38aa1e
Improve identity test cases 2021-01-27 12:41:45 +01:00
1 changed files with 23 additions and 18 deletions

View File

@ -1,26 +1,31 @@
from itertools import product
import subprocess
import signal
from subprocess import DEVNULL, PIPE, Popen, TimeoutExpired
chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ '
# Prevent zombie processes
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
def check_pair(script, instr, outstr):
try:
result = subprocess.run(
[
"/usr/bin/env", "bash", "-c",
";\n".join((
# Cleanup child processes on exit
"trap 'kill -9 $(jobs -p)' SIGINT SIGTERM EXIT",
script,
))
],
timeout=5,
input=instr.encode(),
capture_output=True,
process = Popen(
["/usr/bin/env", "bash", "-c", "--", script],
stdin=PIPE,
stdout=PIPE,
stderr=DEVNULL,
)
return result.returncode == 0 and result.stdout == outstr.encode()
except subprocess.TimeoutExpired:
try:
stdout, stderr = process.communicate(instr.encode(), timeout=5)
return process.returncode == 0 and stdout == outstr.encode()
except TimeoutExpired:
try:
process.kill()
stdout, stderr = process.communicate()
except ProcessLookupError:
pass
return False
@ -58,8 +63,8 @@ if __name__ == '__main__':
print("\nSearching for identity")
find_script((
("1", "1"),
("2", "2"),
("3", "3"),
("42", "42"),
("1984", "1984"),
), max_length=3)
# Successor