telnetopenerchild - plumber - Plumber – a modern approach to plumbing
 (HTM) git clone git://r-36.net/plumber
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       telnetopenerchild (2110B)
       ---
            1 #!/usr/bin/env python3
            2 # coding=utf-8
            3 #
            4 # Copy me if you can.
            5 # by 20h
            6 #
            7 
            8 import sys
            9 import os
           10 import re
           11 import getopt
           12 import pexpect
           13 from urllib.parse import urlparse
           14 from subprocess import Popen
           15 
           16 telnetcmd = "telnet"
           17 #telnetscmd = "telnet-ssl"
           18 telnetscmd = None
           19 
           20 def usage(app):
           21         app = os.path.basename(app)
           22         sys.stderr.write("usage: %s [-dhp] URI\n" % (app))
           23         sys.exit(1)
           24 
           25 def main(args):
           26         global telnetcmd, telnetscmd
           27 
           28         try:
           29                 opts, largs = getopt.getopt(args[1:], 'hdp')
           30         except getopt.GetoptError as err:
           31                 print(str(err))
           32                 usage(args[0])
           33 
           34         dodebug = False
           35         dopretend = False
           36         for o, a in opts:
           37                 if o == "-h":
           38                         usage(args[0])
           39                 elif o == "-d":
           40                         dodebug = True
           41                 elif o == "-p":
           42                         dopretend = True
           43                 else:
           44                         assert False, "unhandled option"
           45 
           46         cmd = telnetcmd
           47         if len(largs) < 1:
           48                 return 1
           49 
           50         uri = urlparse(" ".join(largs))
           51         user = None
           52         password = None
           53         port = "23"
           54         host = uri.netloc
           55 
           56         if "@" in uri.netloc:
           57                 (user, net) = uri.netloc.rsplit("@", 1)
           58                 if ":" in user:
           59                         (user, password) = user.split(":", 1)
           60                 else:
           61                         password = None
           62 
           63                 if ":" in net:
           64                         (host, port) = net.rsplit(":", 1)
           65                 else:
           66                         host = net
           67                         port = "23"
           68         else:
           69                 if ":" in uri.netloc:
           70                         (host, port) = uri.netloc.rsplit(":", 1)
           71 
           72 
           73         if host == None:
           74                 sys.stderr.write("No host given, bailing.\n")
           75                 return 1
           76         
           77         if uri.scheme.startswith("telnets"):
           78                 if telnetscmd == None:
           79                         sys.stderr.write("No telnets command given.\n")
           80                         return 1
           81                 cmd = telnetscmd
           82 
           83         if uri.scheme.endswith("6"):
           84                 cmd = "%s -6" % (cmd)
           85         if uri.scheme.endswith("4"):
           86                 cmd = "%s -4" % (cmd)
           87         
           88         if user != None:
           89                 cmd = "%s -l '%s'" % (cmd, user)
           90 
           91         cmd = "%s '%s'" % (cmd, host)
           92         if port != None:
           93                 cmd = "%s '%s'" % (cmd, port)
           94 
           95         if dodebug == True:
           96                 print("Cmd: '%s'" % (cmd))
           97 
           98 
           99         p = Popen(cmd, shell=True, stdout=sys.stdout, stdin=sys.stdin,
          100                         stderr=sys.stderr)
          101         p.wait()
          102         """
          103         if dopretend == False:
          104                 child = pexpect.spawn(cmd)
          105                 if password != None:
          106                         child.expect('(?i)password')
          107                         child.sendline(password)
          108                 child.interact()
          109         """
          110 
          111         input("Press Enter to close window.")
          112 
          113         return 0
          114 
          115 if __name__ == "__main__":
          116         sys.exit(main(sys.argv))
          117