python browsermob-proxy 问题

版本:browsermob-proxy 0.8.0

使用:

 

from browsermobproxy import Server

BROWSERMOBPROXY = "/usr/local/browsermob-proxy-2.1.4/bin/browsermob-proxy"

server = Server( BROWSERMOBPROXY )

......

(其他代码省略)

 

看一下Server 类中的部分代码:

def stop(self):
        """
        This will stop the process running the proxy
        """
        if self.process.poll() is not None:
            return

        try:
            self.process.kill()
            self.process.wait()
        except AttributeError:
            # kill may not be available under windows environment
            pass

        self.log_file.close()

 start() 关键部分:

self.process = subprocess.Popen(self.command,
                                        stdout=self.log_file,
                                        stderr=subprocess.STDOUT)

再来看 browsermob-proxy

[root@localhost ~]# ll /usr/local/browsermob-proxy-2.1.4/bin/browsermob-proxy
-rwxr-xr-x 1 root root 781 3月  23 2018 /usr/local/browsermob-proxy-2.1.4/bin/browsermob-proxy
[root@localhost ~]# 
[root@localhost ~]# cat /usr/local/browsermob-proxy-2.1.4/bin/browsermob-proxy
#!/bin/sh

BASEDIR=`dirname $0`/..
BASEDIR=`(cd "$BASEDIR"; pwd)`

# if user has not explicitly set a command to use to invoke java, use 'java' and assume it is on the path
if [ -z "$JAVACMD" ]
then
    JAVACMD="java"
fi

"$JAVACMD" $JAVA_OPTS \
           -Dapp.name="browsermob-proxy" \
           -Dbasedir="$BASEDIR" \
           -jar "$BASEDIR/lib/browsermob-dist-2.1.4.jar" \
           "$@"

# if we couldn't find java, print a helpful error message
if [ $? -eq 127 ]
then
    echo
    echo "Unable to run java using command: $JAVACMD"
    echo "Make sure java is installed and on the path, or set JAVACMD to the java executable before running this script."
    echo
    echo "Example:"
    echo
    echo "    $ JAVACMD=/var/lib/jdk/bin/java ./browsermob-proxy"
    echo
fi
[root@localhost ~]# 

browsermob-proxy不是二进制程序。启动server,参数传入的是脚本,脚本执行完毕, 进程退出, 剩下的是Java子进程。 此时调用server.stop(), 无法停止。

解决:

class myServer(Server):
    def __init__(self, path='browsermob-proxy', options=None):
        #Server.__init__(path, options)
        options = options if options is not None else {}
        
        self.path = path
        self.host = 'localhost'
        self.port = options.get('port', 8080)
        self.process = None
        self.command = []
        
        self.command += ["java", "-Dapp.name=browsermob-proxy", "-Dbasedir=/usr/local/browsermob-proxy-2.1.4", "-jar", "/usr/local/browsermob-proxy-2.1.4/lib/browsermob-dist-2.1.4.jar", '--port=%s' % self.port]

    def get_process_pid(self):
        return self.process.pid

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值