2015-09-03 4 views
1

Я хочу проверить, запущены ли api и приложение, прежде чем запускать тесты на них. Я знаю, что я могу получить список открытых портов в CLI с помощьюКак проверить, прослушивает ли какой-либо порт, используя скрипт Python?

sudo lsof -iTCP -sTCP:LISTEN -n -P

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

+0

какой тест? –

+0

Испытания селена. Я хочу убедиться, что приложение работает правильно, а api загружен, прежде чем проходить тесты и получить ложные негативы. @AliSAIDOMAR – Mahmor

+0

Так что рассмотрите использование супервизора с параметром приоритета. http://stackoverflow.com/questions/23244954/how-to-define-start-order-in-group-of-processes-using-supervisord –

ответ

7

Я нашел контролер порта, используя гнездо here, и он работает.

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import socket 
import re 
import sys 
def check_server(address, port): 
    # Create a TCP socket 
    s = socket.socket() 
    print "Attempting to connect to %s on port %s" % (address, port) 
    try: 
     s.connect((address, port)) 
     print "Connected to %s on port %s" % (address, port) 
     return True 
    except socket.error, e: 
     print "Connection to %s on port %s failed: %s" % (address, port, e) 
     return False 

if __name__ == '__main__': 
    from optparse import OptionParser 
    parser = OptionParser() 

    parser.add_option("-a", "--address", dest="address", default='localhost', help="ADDRESS for server", metavar="ADDRESS") 

    parser.add_option("-p", "--port", dest="port", type="int", default=80, help="PORT for server", metavar="PORT") 

    (options, args) = parser.parse_args() 
    print 'options: %s, args: %s' % (options, args) 
    check = check_server(options.address, options.port) 
    print 'check_server returned %s' % check 

    sys.exit(not check) 
1

Вы можете получить результат этой команды и проанализировать ее вручную, если хотите.

Чтобы получить вывод, который вы должны сделать что-то вроде этого:

proc = subprocess.Popen(['lsof', '-iTCP', -'sTCP:LISTEN', '-n' ,'-P'], stdout=subprocess.PIPE) 
tmp = proc.stdout.read() 
1

Вы также можете использовать supervisord с приоритетом параметра. Группируйте все приложения в группе. Таким образом, вы убедитесь, что все все приложения.

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