Как сделать вывод команды OS.popen списком меню выбора? - PullRequest
0 голосов
/ 01 мая 2018

Как сделать вывод os.popen списком опций меню выбора, которые будут использоваться в качестве ввода для другой программы?

Примечание. Каждый раз, когда выходной сигнал изменяется, мы не можем определить одно постоянное меню выбора. Может быть больше 10 или иногда меньше 10 элементов.

SG = "dzdo symaccess -sid {0} show {1} view -detail"
IG = os.popen SG).read()
print SG

Выше приведена программа, если на выходе SG есть десять элементов, как показано ниже:

tiger
lion
elephant
deer
pigeon
fox
hyena
leopard
cheatah
hippo

Вышеуказанные элементы я хочу сделать как выбор элементов, таких как:

print("1. tiger")
print("2. lion")
print("3. elephant")
print("4. deer")
.
.
.
print("11. exit")
print ("\n")
choice = input('enter your choice [1-11] :')
choice = int(choice)
if choice ==1:
    ...

Итак, как мы можем добавить каждый элемент в каждом операторе печати и сделать так, чтобы у него была опция выбора, и как мы можем узнать количество элементов и сделать такое же количество меню выбора?

1 Ответ

0 голосов
/ 01 мая 2018

Очевидно, что я не могу продемонстрировать материал popen, поэтому я жестко закодировал входные данные в многострочную строку, которую я превращаю в список, используя метод .splitlines. Этот код будет работать с данными любого размера, он не ограничен 10 элементами.

Он выполняет некоторую примитивную проверку пользовательского ввода, настоящая программа должна отображать более полезное сообщение, чем «Плохой выбор».

from __future__ import print_function

IG = '''\
tiger
lion
elephant
deer
pigeon
fox
hyena
leopard
cheatah
hippo
'''

data = IG.splitlines()
for num, name in enumerate(data, 1):
    print('{0}: {1}'.format(num, name))

exitnum = num + 1
print('{0}: {1}'.format(exitnum, 'exit'))
while True:
    choice = raw_input('Enter your choice [1-{0}] : '.format(exitnum))
    try:
        choice = int(choice)
        if not 1 <= choice <= exitnum:
            raise ValueError
    except ValueError:
        print('Bad choice')
        continue
    if choice == exitnum:
        break
    elif choice == 1:
        print('Tigers are awesome')
    else:
        print('You chose {0}'.format(data[choice-1]))

print('Goodbye')

демо-выход

1: tiger
2: lion
3: elephant
4: deer
5: pigeon
6: fox
7: hyena
8: leopard
9: cheatah
10: hippo
11: exit
Enter your choice [1-11] : 3
You chose elephant
Enter your choice [1-11] : c
Bad choice
Enter your choice [1-11] : 1
Tigers are awesome
Enter your choice [1-11] : 12
Bad choice
Enter your choice [1-11] : 4
You chose deer
Enter your choice [1-11] : 11
Goodbye

Проверено на Python 2.6.6. Этот код также будет корректно работать на Python 3, вам просто нужно изменить raw_input на input для Python 3. Но , пожалуйста не используйте input на Python 2.

...