Уменьшение количества строк не должно быть императивом, но попытка обеспечить структуру и уменьшить повторение может быть. Было бы неплохо, если бы строка приглашения и соответствующее ей действие были ближе друг к другу. Вы можете, например, объединить в кортеж приглашение «Hit 'c' key ...» и строковый ответ в строке отправки «ccccc \ n», а затем создать массив из всего этого. После этого вы сможете удалить if и получить общее действие, вызывающее линию отправки в индексированном кортеже.
Но как только вы начнете двигаться таким образом, часто лучше всего go полностью и создать простой класс для объединения подсказки, ответа и других частей действия. Например,
class match:
def __init__(self, match, response, before=1, after=0, stop=False):
self.match = match
self.response = response
self.before = before
self.after = after
self.stop = stop
def action(self):
time.sleep(self.before)
child.sendline(self.response)
time.sleep(self.after)
return self.stop
matches = [
match("Hit 'c' key to stop autoboot:", "ccccc\n", 0),
match("prompt#", "\r run net \r", after=1),
match("ARGUS", "\r reset \r", after=5),
...
]
tomatch = [m.match for m in matches]
while True:
index = child.expect(tomatch)
if matches[index].action():
break