Есть ли какой-либо класс, чтобы вернуть печать функции? - PullRequest
0 голосов
/ 26 сентября 2019

Я разрабатываю программу на Python для чтения портов.В моем скрипте есть печать для каждого открытого порта.Но я хотел бы удалить этот отпечаток и поместить его в класс.Поскольку, когда программист хочет увидеть печать, он вызывает класс.

Я могу создать общие классы, чтобы получать пользовательский ввод из основного файла (main.py) и запускать внутри скрипта, но я не могу контролировать печатьиз основного файла

def ping(target,scale):
    def portscan(port):

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            con = s.connect((target,port))
            time.sleep(5)

            port_print = 'Port :',port,"Is Open!."
            time.sleep(5)
            #python = sys.executable
            #os.execl(python, python, * sys.argv)
            print('Terminated')
            con.close()

        except:
            #result = None
            #return result
            pass
    r = 1
    scal = int(scale)
    for x in range(1,scal):

        t = threading.Thread(target=portscan,kwargs={'port':r})
        r += 1
        t.start()

Как вы можете видеть, я создал переменную port_print, и мне бы хотелось, чтобы при вызове пользователем основного файла была печать.

1 Ответ

0 голосов
/ 26 сентября 2019

Используйте Queue, чтобы обойти ограничения return в темах:

from queue import Queue

def ping(target,scale, queue):
    def portscan(port, queue):

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            con = s.connect((target,port))
            time.sleep(5)

            port_print = 'Port :',port,"Is Open!."
            queue.put(port_print)
            time.sleep(5)
            #python = sys.executable
            #os.execl(python, python, * sys.argv)
            print('Terminated')
            con.close()

        except:
            #result = None
            #return result
            pass
    r = 1
    scal = int(scale)
    for x in range(1,scal):

        t = threading.Thread(target=portscan,kwargs={'port':r, queue=queue})
        r += 1
        t.start()

def main():
    my_queue = Queue()
    target = 'some target'
    scale = 10
    ping(target, scale, my_queue)
    random_port_print = my_queue.get()
    print(random_port_print)

Не проверено, но довольно близко к правильному.

...