Я новичок в python и считаю, что есть простой ответ на этот вопрос, но, похоже, он не может понять. Есть ли способ сделать вызов функции в начале этой программы. Как вы можете видеть, я запускаю код, а затем прошу запустить его снова, вот где он выполняет вызов функции прямо сейчас. Это работает так, как есть, но я хотел бы избавиться от всего, кроме цикла while и функции, чтобы я мог очистить код. Благодарю.вызов функции Python в начале программы
import subprocess
import re
print ("This will print any service that is stopped or unknown \n")
#servers
server = str(input("Enter server to query(IP Address): "))
server_list = server.split(",")
server_count = len(server_list)
#services
service = str(input("Enter service to query: "))
service_list = service.split(",")
service_count = len(service_list)
#server loop
for a in range(len(server_list)):
server_net_use = 'net use'+r' \\'+server_list[a]+r'\ipc$ /user:Administrator itv'
server_disconnect = 'net use'+r' \\'+server_list[a]+r'\ipc$ /d'
server_sc = r'\\'+server_list[a]
subprocess.check_output(server_net_use, universal_newlines=True)
#service loop
for i in range(len(service_list)):
x = subprocess.check_output(['sc', server_sc, 'query', service_list[i]], universal_newlines=True)
y = re.sub('\s+',' ',x)
if 'FAILED' in y:
print ('\n'+server_list[a]+' - '+service_list[i]+' - Unknown Service!')
elif 'STOPPED' in y:
print ('\n'+server_list[a]+' - '+service_list[i]+' - '+y.split(" ")[10])
def repeat():
#servers
server = str(input("Enter server to query(IP Address): "))
server_list = server.split(",")
server_count = len(server_list)
#services
service = str(input("Enter service to query: "))
service_list = service.split(",")
service_count = len(service_list)
#server loop
for a in range(len(server_list)):
server_net_use = 'net use'+r' \\'+server_list[a]+r'\ipc$ /user:Administrator itv'
server_disconnect = 'net use'+r' \\'+server_list[a]+r'\ipc$ /d'
server_sc = r'\\'+server_list[a]
subprocess.check_output(server_net_use, universal_newlines=True)
#service loop
for i in range(len(service_list)):
x = subprocess.check_output(['sc', server_sc, 'query', service_list[i]], universal_newlines=True)
y = re.sub('\s+',' ',x)
if 'FAILED' in y:
print ('\n'+server_list[a]+' - '+service_list[i]+' - Unknown Service!\n')
elif 'STOPPED' in y:
print ('\n'+server_list[a]+' - '+service_list[i]+' - '+y.split(" ")[10]+'\n')
while(True):
a = str(input("Do you want to query another service? y/n: "))
if 'y' in a:
subprocess.check_output(server_disconnect, universal_newlines=True)
print ("\n")
repeat()
elif 'n' in a:
subprocess.check_output(server_disconnect, universal_newlines=True)
break;
else:
print ('Enter y/n')
Здесь, похоже, много повторяющегося кода. Я бы предположил, что функция 'repeat()' не нужна и может быть опущена. Кроме того, мне кажется, что цикл while не должен находиться в 'service_checker()' (он в настоящее время вызывает 'service_checker()' рекурсивно), но должен находиться в основной программе в конце файла. – Simon
справедливой точки. Наверное, я увлекся ответом на прямой вопрос, позже я буду убирать код, но основное его намерение состояло в том, чтобы ответить на вопрос и дать представление о том, как правильно это сделать, а не переписать 80 строк кода. – Noelkd
@Simon вы были на 100% прав, даже не посмотрели на код правильно. – Noelkd