#python_3x
Ищу циклом текущего пользователя компьютера в локальной сети
def scan_Lan():
ip_list = ['192.168.4.']
i = 50
while i <= 240:
scan_ip = ip_list[0] + str(i)
response = subprocess.Popen(["ping", "-n", "1", "-w", "200", scan_ip]).wait()
if(response == 0):
try:
wql = 'SELECT * FROM Win32_computerSystem'
c = wmi.WMI(scan_ip, user='office\admin', password='fff')
for item in c.query(wql):
currentUser = str(item.UserName)
print(currentUser)
if(currentUser == "ivanov"):
print(scan_ip)
break
except:
print("-")
i += 1
print("end")
scan_Lan()
Все хорошо работает, но хочу после поиска выходить полностью из цикла while, как
это сделать? Поставил вот здесь
print(scan_ip)
break
но он по всей видимости выходит только из for, а как сделать глобальный break?
Ответы
Ответ 1
break прекращает только вложенный цикл. Внешний цикл продолжает работать. Используйте return, когда результат найден в вашем случае: if current_user == 'ivanov': return scan_ipОтвет 2
Используйте флаг (булево значение) для выхода из циклов. При входе в условие currentUser == "ivanov" меняйте его значение на положительное, делайте break, а в основном цикле установите условие while i <= 240 and not result, тогда цикл будет завершен, как только result станет истиной. Глобального break, для выхода из всех циклов, не существует.Ответ 3
Можно сделать так while i <= 240: scan_ip = ip_list[0] + str(i) response = subprocess.Popen(["ping", "-n", "1", "-w", "200", scan_ip]).wait() if(response == 0): try: wql = 'SELECT * FROM Win32_computerSystem' c = wmi.WMI(scan_ip, user='office\admin', password='fff') for item in c.query(wql): currentUser = str(item.UserName) print(currentUser) if(currentUser == "ivanov"): print(scan_ip) break else: i += 1 # сюда зайдет, если цикл завершился полностью(то есть не было найдено) print("end") continue; except: print("-") break; # сюда попадем и прервем большой цикл, если во внутреннем был найден объект Вот более простой пример для понимания for x in xrange(10): for y in xrange(10): for z in xrange(10): print x,y,z if x*y*z == 30: break # прерываем внутренний цикл else: continue # продолжаем, если внутренний цикл не был прерван break # внутренний цикл был прерван, прерываем и этот цикл else: continue breakОтвет 4
a: list_ = [1, 2, 3, 4, 5] check = True while check: for v in list_: if v == 3: check = False break else: print(v) b: list_ = [1, 2, 3, 4] try: while True: for v in list_: if v == 3: raise UserWarning else: print(v) except UserWarning:pass 1 2
Комментариев нет:
Отправить комментарий