AlexDarkStalker
@AlexDarkStalker
Хочу научится программировать на Python

Как сделать, чтобы надпись о завершении работы программы выводилась только после окончания работы, а не в процессе?

Написал очень примитивный, но многопоточный сканер портов, который проверяет, открыт порт или нет.

Проблема заключается в этом:

5b40c6e5deb8c423732584.png

То есть, программа сначала выводит сообщение о завершении работы, а потом выводит результаты своей работы.

Вот код:

import socket
import sys
import threading
import requests, shutil, os

host = input('IP or host name: ')

print('--------------------------------------')
print('#########')
print('#Scaning#')
print('#########' + '\n')

def PortCheck(port):
    # Запускаем проверку порта
    s = socket.socket()
    s.settimeout(1)
    try:
        s.connect((host, port))
    except socket.error:
        pass
    else:
        s.close
        print(str(port) + ' is open' + '\n')

ports = [20, 21, 22, 23, 25, 42, 43, 53, 67, 69, 80, 110,
         115, 123, 137, 138, 139, 143, 161, 179, 443, 445,
         514, 515, 993, 995, 1080, 1194, 1433, 1702, 1723,
         3128, 3268, 3306, 3389, 5432, 5060, 5900, 5938, 8080, 10000, 20000]

for port in ports:
    threading.Thread(target=PortCheck, args = [port]).start()

print('--------------------------------------')
input('Process ended. Press Enter.' + '\n')


Как сделать так, чтобы сначала выводился список открытых портов, а потом надпись о завершении работы программы?
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
for port in ports:
    threading.Thread(target=PortCheck, args = [port]).start()

for t in threading.enumerate():          # Получаем все потоки
    if t != threading.current_thread():  # Если это не текущий поток
        t.join()                         # Ожидаем его завершения

print('--------------------------------------')
input('Process ended. Press Enter.' + '\n')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
hostmaster
@hostmaster
DevOps Engineer
так же atexit
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы