我是python的新手,我正在使用stript来获取用户输入以重定向到程序的另一部分。我使用条件语句要么返回要么退出。但是当我按下键继续退出时。请帮忙
def infoMenu():
a = '''
1 = Volume Information
2 = Volume Status
3 = Display Peer Status
4 = CTDB Status
5 = CTDB Ip
6 = Display CTDB config file
'''
print a
a = raw_input('Enter your option: ')
if a == '1':
option = raw_input('Please enter name of vol: ')
subprocess.call(['gluster vol ', option, 'info'], shell=False)
elif a == '2':
option = raw_input('Please enter name of vol: ')
subprocess.call(['gluster vol ', option, 'status'], shell=False)
elif a == '3':
subprocess.call(['lvdisplay'], shell=False)
answer = raw_input('Press 0 to go back or any to exit (default[0]): ')
if answer == '0':
printOptions()
else:
exit()
elif a == '4':
option = raw_input('Please enter name of vol')
subprocess.call(['gluster vol ', option, 'info'], shell=False)
elif a == '5':
option = raw_input('Please enter name of vol')
subprocess.call(['gluster vol ', option, 'info'], shell=False)
else:
exit()
我正在谈论条件陈述3,当我按0时,它想回到开始菜单,其他任何东西都应该退出。我做错了什么。
答案 0 :(得分:0)
尝试将函数内的所有内容都放到
中def function()
while True:
everything here
然后更改
if answer == '0':
pass
else:
break
另外,如果这样做,请将最后的exit()更改为break。
你的问题是该函数只被调用一次,因此所有条件只运行一次,并且不会恢复为一。
答案 1 :(得分:0)
跟踪您的代码:
infoMenu()
subprocess.call
正在运行在此之后,您的代码和您的描述似乎不匹配,因为如果用户输入" 0",您调用的其他函数(不包括在内)称为&# 34;的printoptions()"
一个超级简单的修复(如果你return
会破坏)会重新调用infoMenu
代替printOptions
来电,但我强烈怀疑你会更好更好的重写。
如果我尝试做你所描述的事情(使用类似你的风格),我会这样做:
def infoMenu():
def thing1():
pass #do_somethings()
def thing2():
#do_someotherthings()
user_input = raw_input('Press 0 to go back or any to exit (default[0]): ')
if (len(user_input)==0) or (user_input == '0'):
return
else:
exit()
a="""
1 = thing1
2 = thing2
"""
print a
user_input = raw_input('Enter your option')
if user_input == '1':
thing1()
if user_input == '2':
thing2()
while 1:
infoMenu()