Python HTTP-ответ с Socket и Argparse - PullRequest
0 голосов
/ 06 марта 2020

Я сделал приведенный ниже код с небольшой помощью из некоторого онлайн-учебника, если вы введете размер ответа, а также правильный хост и порт, все работает нормально. Но, если вы пропустите шаг, это даст вам ошибку. Я хочу дать пользовательское сообщение, чтобы пользователь знал, что он сделал не так. Я посмотрел, как использовать «попробовать» и «кроме», но мой вопрос заключается в том, использовать ли я это из всего, что в моем коде? Это кажется немного повторяющимся.

import socket
import argparse

parser = argparse.ArgumentParser()

parser.add_argument("-s", "--size", help = "How many bytes you will recive from the HTTP  Response")
parser.add_argument("-p", "--port", help = "The port to which you want to recive a response from")
parser.add_argument("-t", "--host", help = "The host to which you want to recive a response from")

args = parser.parse_args()

size = int(args.size)
port = int(args.port)
host = str(args.host)


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))

message = ("i")
s.send(message.encode("utf-8"))

data = s.recv(size)
print(data)

1 Ответ

0 голосов
/ 10 марта 2020

Если вы не хотите делать

try:
    size = int(args.size)
except ValueError:
    print("Size is not an integer!")
    sys.exit()

для каждого аргумента, вы можете предоставить синтаксическому анализатору типы для каждого аргумента - и он проверит их для вас.

parser.add_argument("-s", "--size", help="...", type=int)

Также см. этот пример из argparse docs.

...