From a3acabda7315d179157ffbdf8c1f92d7c4d2c8ac Mon Sep 17 00:00:00 2001
From: Benedek Racz <betontalpfa@gmail.com>
Date: Mon, 30 Mar 2020 09:31:31 +0200
Subject: [PATCH] [FIX] Socket-mode port has not been added to the argument
 list. Fix: #34

---
 wexpect/__main__.py | 69 ++++++++++++++++++++++++++++-----------------
 1 file changed, 43 insertions(+), 26 deletions(-)

diff --git a/wexpect/__main__.py b/wexpect/__main__.py
index cb129d2..46ffeea 100644
--- a/wexpect/__main__.py
+++ b/wexpect/__main__.py
@@ -1,6 +1,7 @@
 import argparse
 import sys
 import logging
+import traceback
 
 import wexpect.console_reader as console_reader
 import wexpect.wexpect_util as wexpect_util
@@ -20,38 +21,54 @@ def str2bool(v):
         raise argparse.ArgumentTypeError('Boolean value expected.')
 
 def main():
-    parser = argparse.ArgumentParser(description='Wexpect: executable automation for Windows.')
+    try:
+        parser = argparse.ArgumentParser(description='Wexpect: executable automation for Windows.')
 
-    parser.add_argument('--console_reader_class', type=str,
-                        help='Class name of the console reader class.')
+        parser.add_argument('--console_reader_class', type=str,
+                            help='Class name of the console reader class.')
 
-    parser.add_argument('command', type=str, nargs='+', help='Command to be run with its arguments')
-    parser.add_argument('--host_pid', type=int, help='Host process process ID')
-    parser.add_argument('--codepage', type=str, help='Codepage')
-    parser.add_argument('--window_size_x', type=int, help='Width of the console window', default=80)
-    parser.add_argument('--window_size_y', type=int, help='Height of the console window', default=25)
-    parser.add_argument('--buffer_size_x', type=int, help='Width of the console buffer', default=80)
-    parser.add_argument('--buffer_size_y', type=int, help='Height of the console buffer',
-                        default=16000)
-    parser.add_argument('--local_echo', type=str, help='Echo sent characters', default=True)
-    parser.add_argument('--interact', type=str, help='Show console window', default=False)
-    args = parser.parse_args()
-    logger.info(f'Starter arguments: {args}')
+        parser.add_argument('command', type=str, nargs='+', help='Command to be run with its arguments')
+        parser.add_argument('--host_pid', type=int, help='Host process process ID')
+        parser.add_argument('--codepage', type=str, help='Codepage')
+        parser.add_argument('--window_size_x', type=int, help='Width of the console window', default=80)
+        parser.add_argument('--window_size_y', type=int, help='Height of the console window', default=25)
+        parser.add_argument('--buffer_size_x', type=int, help='Width of the console buffer', default=80)
+        parser.add_argument('--buffer_size_y', type=int, help='Height of the console buffer',
+                            default=16000)
+        parser.add_argument('--local_echo', type=str, help='Echo sent characters', default=True)
+        parser.add_argument('--interact', type=str, help='Show console window', default=False)
+        parser.add_argument('--port', type=int, help=
+                            "If the console reader class is SpawnSocket, this option specifies the "
+                            "socket's port.", default=False)
 
-    if args.console_reader_class == 'ConsoleReaderSocket':
-        conole_reader_class = console_reader.ConsoleReaderSocket
-    elif args.console_reader_class == 'ConsoleReaderPipe':
-        conole_reader_class = console_reader.ConsoleReaderPipe
+        try:
+            args = parser.parse_args()
+        except SystemExit:
+            logger.error('Unexpected exception.')
+            logger.info(traceback.format_exc())
+            raise
 
-    command = wexpect_util.join_args(args.command)
+        logger.info(f'Starter arguments: {args}')
 
-    cons = conole_reader_class(
-        path=command, host_pid=args.host_pid, codepage=args.codepage,
-        window_size_x=args.window_size_x, window_size_y=args.window_size_y,
-        buffer_size_x=args.buffer_size_x, buffer_size_y=args.buffer_size_y,
-        local_echo=str2bool(args.local_echo), interact=str2bool(args.interact))
+        if args.console_reader_class == 'ConsoleReaderSocket':
+            conole_reader_class = console_reader.ConsoleReaderSocket
+        elif args.console_reader_class == 'ConsoleReaderPipe':
+            conole_reader_class = console_reader.ConsoleReaderPipe
 
-    sys.exit(cons.child_exitstatus)
+        command = wexpect_util.join_args(args.command)
+
+        cons = conole_reader_class(
+            path=command, host_pid=args.host_pid, codepage=args.codepage, port=args.port,
+            window_size_x=args.window_size_x, window_size_y=args.window_size_y,
+            buffer_size_x=args.buffer_size_x, buffer_size_y=args.buffer_size_y,
+            local_echo=str2bool(args.local_echo), interact=str2bool(args.interact))
+
+        sys.exit(cons.child_exitstatus)
+
+    except Exception as e:
+        logger.error('Unexpected exception.')
+        logger.info(traceback.format_exc())
+        raise
 
 if __name__ == "__main__":
     main()