Используйте приведенный ниже код, чтобы разрешить работу следующих команд, и они обе работают, однако при передаче аргумента, существующего в ACTIONS, он вызывает функцию, но по-прежнему запускает исключение.
miner.py 192.168.88.250 stats temp 1000 2000
miner.py 192.168.88.250 summary
# Get FAN temnperature
def temp():
WARN = int(sys.argv[4]) # WARN temp is argument 3 from command line
CRIT = int(sys.argv[5]) # CRIT temp is argument 4 from command line
temp = connect(sys.argv[2])
fantemp1 = temp['STATS'][1]['fan1']
fantemp2 = temp['STATS'][1]['fan2']
fantemp3 = temp['STATS'][1]['fan3']
print()
if fantemp1 >= WARN and fantemp1 <= CRIT:
status = "Fan1, is overheating"
exitstatus = 1
elif fantemp2 >= WARN and fantemp2 <= CRIT:
status = "Fan2, is overheating"
exitstatus = 1
elif fantemp3 >= WARN and fantemp3 <= CRIT:
status = "Fan3, is overheating"
exitstatus = 1
elif fantemp1 <= WARN and fantemp1 <= CRIT:
status = "Fan1, is critical"
exitstatus = 2
elif fantemp2 <= WARN and fantemp2 <= CRIT:
status = "Fan2, is critical"
exitstatus = 2
elif fantemp3 <= WARN and fantemp3 <= CRIT:
status = "Fan3, is critical"
exitstatus = 2
else:
status = "All is okay"
exitstatus = 0
#print(status)
exit(exitstatus)
# For all commends
def all():
all = connect(sys.argv[2])
print(all)
try:
cmd = sys.argv[5]
actions = ['temp', 'stats', 'chips']
# check if it's allowed
if cmd in actions:
# lookup the function by name in the globals() dictionary
func = globals()[cmd]
# call the function
func()
except:
all()
Кажется, это работает нормально, но все равно было бы интересно узнать, почему попробуйте и за исключением того, что не работает.
if len(sys.argv) > 3:
cmd = sys.argv[3]
actions = ['temp', 'stats', 'chips']
func = globals()[cmd]
# call the function
sys.exit(func())
# check if it's allowed
else:
all()