Files
dehumidify_ctrl/code/.venv/bin/webreplcmd
Jonas Zeunert 4309a2d185 Add Code
2024-08-16 21:57:55 +02:00

163 lines
4.9 KiB
Python
Executable File

#!/home/rhetenor/Projects/esp/python/.venv/bin/python
import argparse
import os
import sys
import webrepl
examples="""webreplcmd --host 192.168.4.1 --password ulx3s ls
webreplcmd --host 192.168.4.1 --password ulx3s get src-remote-file.txt dest-local-file.txt
webreplcmd --host 192.168.4.1 --password ulx3s put src-local-file.txt dest-remote-file.txt
webreplcmd --host 192.168.4.1 --password ulx3s cat main.py
webreplcmd --host 192.168.4.1 --password ulx3s cmd 'import os; os.listdir()'
"""
parser = argparse.ArgumentParser(description='webrepl - connect to websocket webrepl',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog=examples)
parser.add_argument('--host', '-i', default=os.environ.get('WEBREPL_HOST', None), help="Host to connect to")
parser.add_argument('--port', '-P', type=int, default=os.environ.get('WEBREPL_PORT', 8266), help="Port to connect to")
parser.add_argument('--verbose', '-v', action='store_true', help="Verbose information")
parser.add_argument('--debug', '-d', action='store_true', help="Enable debugging messages")
parser.add_argument('--password', '-p', default=os.environ.get('WEBREPL_PASSWORD', None), help="Use following password to connect")
parser.add_argument('--before', '-B', action='append', default=os.environ.get('WEBREPL_BEFORE', None), help="command to execute before")
parser.add_argument('--cmd', '-c', action='append', default=os.environ.get('WEBREPL_CMD', None), help="command to execute")
parser.add_argument('--after', '-A', action='append', default=os.environ.get('WEBREPL_AFTER', None), help="command to execute after")
parser.add_argument('commands', metavar='CMD', type=str, nargs='+',
help='commands for repl')
args = parser.parse_args()
if not args.host:
print("You need to specify host")
parser.print_usage()
sys.exit()
password=''
if not args.password:
print("You need to specify password")
try:
import getpass
password = getpass.getpass()
except:
parser.print_usage()
sys.exit()
else:
password = args.password
if not args.commands or len(args.commands)<1:
print("Command is not recognized/given")
parser.print_usage()
sys.exit()
repl=webrepl.Webrepl(**{})
if args.debug:
repl.debug = True
if args.verbose:
repl.verbose = True
try:
repl.connect(args.host, args.port)
repl.login(password)
except Exception as e:
print("Error connecting to host",args.host,"at port",args.port,":",e)
sys.exit()
if not repl.connected:
print("Not connected. Check your password!")
sys.exit()
if args.before:
for cmd in args.before:
print("[i] Issuing command: "+cmd)
try:
r=repl.send_cmd(cmd)
print(r.decode())
except Exception as e:
print("[e] Error running command:",cmd,":",e)
cmd = args.commands[0].lower()
if cmd == "ver" or cmd == "version":
if args.verbose:
print("[i] Getting version")
ver=repl.get_ver()
print("[i] Version ",ver[0], ver[1], ver[2])
elif cmd == "list" or cmd == "ls":
print("[i] Listing")
r=repl.sendcmd("import os; os.listdir()")
print(r.decode())
elif cmd == "get" or cmd == "download":
if len(args.commands)<3:
sys.stderr.write("Not enough arguments for "+cmd+"\n")
sys.exit()
source=args.commands[1]
dest=args.commands[2]
if args.verbose:
print("[i] Downloading "+source+" to "+dest)
repl.get_file(source, dest)
elif cmd == "put" or cmd == "upload":
if len(args.commands)<3:
sys.stderr.write("Not enough arguments for "+cmd+"\n")
sys.exit()
source=args.commands[1]
dest=args.commands[2]
if args.verbose:
print("[i] Uploading "+source+" to "+dest)
repl.put_file(source, dest)
elif cmd == "del" or cmd == "rm" or cmd == "dele":
if len(args.commands)<2:
sys.stderr.write("Not enough arguments for "+cmd+"\n")
sys.exit()
filename=args.commands[1]
if args.verbose:
print("[i] Deleting "+filename)
r=repl.sendcmd("import os; os.remove('"+filename+"')")
print(r.decode())
elif cmd == "print" or cmd == "cat" or cmd == "type":
if len(args.commands)<2:
sys.stderr.write("Not enough arguments for "+cmd+"\n")
sys.exit()
source=args.commands[1]
if args.verbose:
print("[i] Content of file",source)
r=repl.get_file_content(source)
print(r.decode())
elif cmd == "command" or cmd == "cmd":
if len(args.commands)<2:
sys.stderr.write("Not enough arguments for "+cmd+"\n")
sys.exit()
cmd=args.commands[1]
if args.verbose:
print("[i] Executing "+cmd)
r=repl.sendcmd(cmd)
print(r.decode())
else:
sys.stderr.write("Command not recognized\n")
if args.cmd:
for cmd in args.cmd:
print("[i] Issuing command: "+cmd)
try:
r=repl.send_cmd(cmd)
print(r.decode())
except Exception as e:
print("[e] Error running command:",cmd,":",e)
if args.after:
for cmd in args.after:
print("[i] Issuing command: "+cmd)
try:
r=repl.send_cmd(cmd)
print(r.decode())
except Exception as e:
print("[e] Error running command:",cmd,":",e)
if args.verbose:
print("[i] closing REPL/WS")
repl.disconnect()