diff --git a/tests/scripts/generate_tls13_compat_tests.py b/tests/scripts/generate_tls13_compat_tests.py
index 103de69..b9e09d8 100755
--- a/tests/scripts/generate_tls13_compat_tests.py
+++ b/tests/scripts/generate_tls13_compat_tests.py
@@ -45,7 +45,6 @@
 }
 
 
-
 CAFILE = {
     'ecdsa_secp256r1_sha256': 'data_files/test-ca2.crt',
     'ecdsa_secp384r1_sha384': 'data_files/test-ca2.crt',
@@ -76,7 +75,6 @@
     'x448': 0x1e,
 }
 
-OUTPUT_FILE=sys.stdout
 
 def remove_duplicates(seq):
     seen = set()
@@ -372,7 +370,8 @@
     cmd = prefix.join(cmd)
     return '\n'.join(server.pre_checks() + client.pre_checks() + [cmd])
 
-SSL_OUTPUT_HEADER='''#!/bin/sh
+
+SSL_OUTPUT_HEADER = '''#!/bin/sh
 
 # {filename}
 #
@@ -401,11 +400,12 @@
 #
 '''
 
+
 def main():
     parser = argparse.ArgumentParser()
 
     parser.add_argument('-o', '--output', nargs='?',
-                        default=None, help='Output file path')
+                        default=None, help='Output file path if `-a` was set')
 
     parser.add_argument('-a', '--generate-all-tls13-compat-tests', action='store_true',
                         default=False, help='Generate all available tls13 compat tests')
@@ -442,34 +442,38 @@
                         help='Choose cipher suite for test')
 
     args = parser.parse_args()
-    if args.output:
-        OUTPUT_FILE=open(args.output,'w')
-        OUTPUT_FILE.write(SSL_OUTPUT_HEADER.format(filename=args.output))
 
-    if args.generate_all_tls13_compat_tests:
+    def get_all_test_cases():
         for i in itertools.product(CIPHER_SUITE_IANA_VALUE.keys(), SIG_ALG_IANA_VALUE.keys(),
                                    NAMED_GROUP_IANA_VALUE.keys(), SERVER_CLS.keys(),
                                    CLIENT_CLS.keys()):
-            test_case = generate_compat_test( **dict(
+            yield generate_compat_test(**dict(
                 zip(['cipher', 'sig_alg', 'named_group', 'server', 'client'], i)))
-            print(test_case,file=OUTPUT_FILE)
+
+    if args.generate_all_tls13_compat_tests:
+        if args.output:
+            with open(args.output, 'w', encoding="utf-8") as f:
+                f.write(SSL_OUTPUT_HEADER.format(filename=args.output))
+                f.write('\n\n'.join(get_all_test_cases()))
+        else:
+            print('\n'.join(get_all_test_cases()))
         return 0
 
     if args.list_ciphers or args.list_sig_algs or args.list_named_groups \
             or args.list_servers or args.list_clients:
         if args.list_ciphers:
-            print(*CIPHER_SUITE_IANA_VALUE.keys(),file=OUTPUT_FILE)
+            print(*CIPHER_SUITE_IANA_VALUE.keys())
         if args.list_sig_algs:
-            print(*SIG_ALG_IANA_VALUE.keys(),file=OUTPUT_FILE)
+            print(*SIG_ALG_IANA_VALUE.keys())
         if args.list_named_groups:
-            print(*NAMED_GROUP_IANA_VALUE.keys(),file=OUTPUT_FILE)
+            print(*NAMED_GROUP_IANA_VALUE.keys())
         if args.list_servers:
-            print(*SERVER_CLS.keys(),file=OUTPUT_FILE)
+            print(*SERVER_CLS.keys())
         if args.list_clients:
-            print(*CLIENT_CLS.keys(),file=OUTPUT_FILE)
+            print(*CLIENT_CLS.keys())
         return 0
 
-    print(generate_compat_test(**vars(args)),file=OUTPUT_FILE)
+    print(generate_compat_test(**vars(args)))
     return 0
 
 
