#python #list #sockets #arguments #typeerror
#python #Список #сокеты #аргументы #ошибка типа
Вопрос:
Первая публикация при переполнении стека, поэтому дайте мне все советы, когда дело доходит до постановки правильного вопроса и еще много чего. В настоящее время я использую модуль сокета в python для школьного проекта для создания «интерфейса командной строки / виртуального маршрутизатора», который может настраивать прослушивание «адресов» (мы можем использовать порты для упрощения), рекламы маршрутизатора, включения виртуальных интерфейсов и т. Д. Самое большое препятствие, с которым я сталкиваюсь на данный момент, — это выяснить, чтобы командная строка принимала различные размеры аргументов, не сталкиваясь с ошибкой типа. Цель (сначала) состоит в том, чтобы заставить командную строку принимать одинарные, двойные и тройные аргументы вместо постоянных двух, которые у меня уже есть; то, что мой код уже делает, это принимает входные данные, разбивает их на разные аргументы, а затем использует их. Я не знаю, как начать пытаться изменить это. Я пытался создавать значения по умолчанию всякий раз, когда нет трех аргументов, но это было безрезультатно. Код начинается как приглашение командной строки без «>», готовый принять любой ввод. Затем я ввожу «команду», такую как listenport 200, после чего выполняется код, а затем прослушивается порт 200 (код не показан, поскольку он не применим к проблеме). Однако иногда мне нужны три аргумента, такие как remoteHost, для которых одновременно требуются remoteHost и RemotePort . Вместо того, чтобы постоянно вводить третье значение, которое ничего не даст, я хотел попытаться заставить его принимать различные ответы. Приветствуется любая помощь.
while 1:
try:
message, address = clientSocket.recvfrom(8192) # Buffer size is 8192. Change as needed.
if message:
print (address, "> ", message.decode())
except:
pass
input = getLine();
if(input != False):
port = 0
#port2 = 0
print ("input is: ", input)
delimitedInput = input.split(' ')
print (delimitedInput)
(command, port) = delimitedInput
#(command, port, port2) = delimitedInput
print ("Command: ", command)
print ("number: ", port)
#print ("number: ", port2)
Комментарии:
1. Просто проверьте
len(delimitedInput)
, сколько аргументов командной строки вы получили, а затем переходите на основе этого.2. О! Итак, я должен разделять свои команды на основе len(delimitedInput) и иметь один аргумент в одной ветке, два аргумента в другой ветке и три аргумента в третьей ветке?
3. Да, просто
numC = len(delimitedInput)
, а затемif numC > 1
и т. Д. То, как вы выполняете ветвление, зависит от вашей логики.