Реализуйте команду ECHOPython

Программы на Python
Ответить
Anonymous
 Реализуйте команду ECHO

Сообщение Anonymous »

Инструкции
На этом этапе проекта мне нужно добавить поддержку команды ECHO.
ECHO — это такая команда, как PING, которая используется для тестирования и отладки. Он принимает один аргумент и возвращает его в виде массовой строки RESP.

Код: Выделить всё

$ redis-cli PING # The command I implemented in previous stages
PONG
$ redis-cli ECHO hey # The command I will implement in this stage
hey
Тесты
Тестер выполнит программу следующим образом:

Код: Выделить всё

$ ./your_program.sh
Затем он отправит команду ECHO с аргументом на ваш сервер:

Код: Выделить всё

$ redis-cli ECHO hey
Тестер ожидает получить $3\\r\\nhey\\r\\n в качестве ответа (это строка hey, закодированная как групповая строка RESP.< /p>
Это мое решение:

Код: Выделить всё

import socket
import threading

def handle_client(conn, addr):
print(f'Connected to {addr}')

while True:
data = conn.recv(1024)  # Read data as bytes
if not data:  # If no data is received, exit the loop
break

request = data.decode()

pong = b"+PONG\r\n"

if request.lower().startswith("echo"):
# Parse the message for the ECHO command
parts = request.split("\r\n")
if len(parts) >= 4:
res_data = parts[3]  # Extract the actual argument for ECHO (the string after ECHO)
content_len = len(res_data)  # Get the length of the argument
# Correctly format the response as a bulk string
response = f"${content_len}\r\n{res_data}\r\n"
conn.send(response.encode())  # Send the response back
else:
# Default response for PING
conn.send(b"+PONG\r\n")

print(f"Connection to {addr} closed")
conn.close()  # Close the connection with the client

def main():
print("Logs from your program will appear here!")

# Set up the server socket and start listening for connections
server_socket = socket.create_server(("localhost", 6379), reuse_port=True)
server_socket.listen()

while True:
# Accept a new client connection
conn, addr = server_socket.accept()

# Create and start a new thread to handle the client
client_thread = threading.Thread(target=handle_client, args=(conn, addr))
client_thread.start()

if __name__ == "__main__":
main()
Ошибка:

Код: Выделить всё

Initiating test run...

⚡ This is a turbo test run. https://codecrafters.io/turbo

Running tests. Logs should appear shortly...

[compile] Moved ./.codecrafters/run.sh → ./your_program.sh
[compile] Compilation successful.

[tester::#QQ0] Running tests for Stage #QQ0 (Implement the ECHO command)
[tester::#QQ0] $ ./your_program.sh
[your_program] Logs from your program will appear here!
[tester::#QQ0] $ redis-cli ECHO pineapple
[your_program] Connected to ('127.0.0.1', 39346)
[tester::#QQ0] Expected "pineapple", got "PONG"
[tester::#QQ0] Test failed (try setting 'debug: true' in your codecrafters.yml to see more details)
Я думаю, что парсер не может прочитать команду ECHO, но я не знаю, как это исправить. Будем благодарны за любую помощь.


Подробнее здесь: https://stackoverflow.com/questions/791 ... ho-command
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»