2013-05-15 6 views
0

Je suis plus jeune en python et je crois qu'il y a une réponse simple à cela, mais je n'arrive pas à le comprendre. Est-il possible de faire un appel de fonction au début de ce programme. Comme vous pouvez le voir, je cours le code et demande ensuite de l'exécuter à nouveau, c'est là que se fait l'appel de la fonction en ce moment. Cela fonctionne comme il est, mais je voudrais me débarrasser de tout sauf la boucle while et la fonction afin que je puisse nettoyer le code. Merci.Appel de fonction Python au début du programme


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') 

Répondre

3

Voici comment:

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

Il semble toujours y avoir beaucoup de code répété ici. Je suggère que la fonction 'repeat()' est inutile et peut être omise. De plus, il me semble que la boucle 'while' ne devrait pas être dans' service_checker() '(elle appelle actuellement' service_checker() 'récursivement) mais devrait être dans le programme principal à la fin du fichier. – Simon

+0

point équitable. Je suppose que je me suis emporté en répondant à la question directe, je vais ranger le code plus tard, mais mon intention principale était de répondre à la question et donner une idée de la façon de le faire correctement ne pas réécrire 80 lignes de code. – Noelkd

+0

@Simon vous étiez 100% à droite n'a même pas regardé le code correctement. – Noelkd

0

Sa fait assez facile. Définissez simplement la fonction dès que possible, puis appelez-la juste après qu'elle a été définie.

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

Si tout se passe bien, vous devriez obtenir:

Hello, World! 

Sinon, vérifier les erreurs.

Questions connexes