-1

メインコードの実行を開始する前に、特定のポートが開いているかどうかを確認し、開いているかどうかを確認してから、コードが「正常に」開始できるようにポートを閉じます。

だから私はオンラインでグーグルして、ここでコードを見つけました:http: //www.paulwhippconsulting.com.au/tips/63-finding-and-killing-processes-on-ports

しかし、そこからコードを貼り付けるだけです。

import os
import subprocess
import re

ports = ['1234','5678','9101']


popen = subprocess.Popen(['netstat', '-lpn'],
                         shell=False,
                         stdout=subprocess.PIPE)
(data, err) = popen.communicate()

pattern = "^tcp.*((?:{0})).* (?P[0-9]*)/.*$"
pattern = pattern.format(')|(?:'.join(ports))
prog = re.compile(pattern) #<---- error line
for line in data.split('\n'):
    match = re.match(prog, line)
    if match:
        pid = match.group('pid')
        subprocess.Popen(['kill', '-9', pid])

しかし、それはエラーをスローします。

 raise error, v # invalid expression
sre_constants.error: unknown specifier: ?P[
4

1 に答える 1

4

そのスニペットを投稿した仲間は、HTMLを忘れてコードをエスケープしました!正しいコードは次のとおりです。

import os
import subprocess
import re

ports = ['1234','5678','9101']


popen = subprocess.Popen(['netstat', '-lpn'],
                         shell=False,
                         stdout=subprocess.PIPE)
(data, err) = popen.communicate()

pattern = "^tcp.*((?:{0})).* (?P<pid>[0-9]*)/.*$"
pattern = pattern.format(')|(?:'.join(ports))
prog = re.compile(pattern)
for line in data.split('\n'):
    match = re.match(prog, line)
    if match:
        pid = match.group('pid')
        subprocess.Popen(['kill', '-9', pid])

<pid>に続くことに注意してください?P

于 2013-02-16T06:51:36.403 に答える