2013-05-15 2 views
0

Я новичок в 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') 

ответ

3

Это как:

import subprocess 
import re 

def server_checker(): 
    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!\n') 
     elif 'STOPPED' in y: 
     print ('\n'+server_list[a]+' - '+service_list[i]+' - '+y.split(" ")[10]+'\n') 


if __name__ == "__main__":  
    server_checker() 
    while(True): 
     answer = str(input("Do you want to query another service? y/n: ")) 
     if answer.lower() in ["yes","y","letsgo"]: 
      subprocess.check_output(server_disconnect, universal_newlines=True) 
      print ("\n") 
      server_checker() 
     elif answer.lower() in ["no","n,","nowayhosay"]: 
      subprocess.check_output(server_disconnect, universal_newlines=True) 
      break; 
     else: 
      print ('Enter y/n') 
+0

Здесь, похоже, много повторяющегося кода. Я бы предположил, что функция 'repeat()' не нужна и может быть опущена. Кроме того, мне кажется, что цикл while не должен находиться в 'service_checker()' (он в настоящее время вызывает 'service_checker()' рекурсивно), но должен находиться в основной программе в конце файла. – Simon

+0

справедливой точки. Наверное, я увлекся ответом на прямой вопрос, позже я буду убирать код, но основное его намерение состояло в том, чтобы ответить на вопрос и дать представление о том, как правильно это сделать, а не переписать 80 строк кода. – Noelkd

+0

@Simon вы были на 100% прав, даже не посмотрели на код правильно. – Noelkd

0

Ее на самом деле довольно легко. Просто определите функцию как можно скорее, а затем вызовите ее сразу после ее определения.

def saysomething(say): 
print say 
saysomething("Hello, World!") 

Если все идет хорошо, вы должны получить:

Hello, World! 

Если нет, проверьте наличие ошибок.

Смежные вопросы