tags: #vlc #expect #media #telnet This is my basic expect script ```expect #!/usr/bin/expect set timeout 1 set host "[lindex $argv 0]" set tport "[lindex $argv 1]" puts "tport '$tport'" if { $tport == "" } { set tport 0 } set port "[expr 5000 + $tport]" set password "password" spawn gtelnet $host $port expect { timeout { puts "timeout pw" ; exit 1 } "Password:" } send "$password\r" expect { timeout { puts "timeout welcome" ; exit 1 } "Welcome, Master" } interact ``` and because I am *extremely lazy*, I wrote this python script with shorthands for the host name (I don't know if you can do a dictionary lookup in expect, so I do it in Python and then use `os.execv` to load the expect script above). In the following, `tvlce` is the name of the script above. ```python #!/usr/bin/env python import sys import os args = sys.argv[1:] d = { ".": "localhost", "lh": "localhost", "l": "landsend", "f": "flypaper", "b": "bumblebee", "g": "gandalf" } try: p = int(args[1]) if p < 0 or p > 399: print(f"Relative port number out of range (should be 0..399)") raise ValueError except (ValueError,IndexError): print(f"{sys.argv[0]} host port") exit(1) if args[0] in d: args[0]=d[args[0]] os.execv(os.path.expanduser("~/bin/tvlce"),["tvlce"]+args) ``` ## tvlcmd This sends individual commands via telnet. Usage ```bash tvlcmd bumblebee 20 pause ``` the code ```python #!/usr/bin/env python from subprocess import run, Popen, PIPE a = r"""set timeout 1 set host "[lindex $argv 0]" set tport "[lindex $argv 1]" puts "tport '$tport'" if { $tport == "" } { set tport 0 } set port "[expr 5000 + $tport]" set password "optimus" spawn gtelnet $host $port expect { timeout { puts "timeout pw" ; exit 1 } "Password:" } send "$password\r" expect { timeout { puts "timeout welcome" ; exit 1 } "Welcome, Master" } sleep 0.1 """ import sys args = sys.argv[1:] try: host, port, *args = args if len(args) == 0: raise ValueError() except ValueError: print(f"{sys.argv[0]} [...]") exit(1) d = { ".": "localhost", "lh": "localhost", "l": "landsend", "f": "flypaper", "b": "bumblebee", "g": "gandalf" } if host in d: host = d[host] b="sleep 0.1" args = [arg.replace('"','\"') for arg in args] args = [f"send \"{arg}\\r\"" for arg in args] scr="\n".join([a]+args+[b]) proc = Popen(["expect","-f","-",host,port],stdin=PIPE) proc.communicate(input=scr.encode()) exit(proc.returncode) ```