Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

分享一个自己编写的脚本 进程监听端口列表 Windows平台



  • 分享一个自己编写的脚本,用于查看进程都监听了哪些端口。
    代码如下:
    [code]from subprocess import Popen as popen
    import re
    import os

    fname = 'tmp.txt'
    fout = open(fname, 'wb')
    p = popen('netstat -nao', stdout=fout)
    p.wait()
    p = popen('tasklist', stdout=fout)
    p.wait()
    fout.close()

    fin = open(fname, 'rb')
    buf = fin.read()
    fin.close()
    os.remove(fname)

    p1 = ':(\d{1,5}) +?.+?LISTENING +?(\d{1,5})'
    p2 = '(.+?)  +?(\d{1,5}) Console|(.+?)  +?(\d{1,5}) Services'

    ports = {}
    for i in re.finditer(p1, buf):
        _port = i.group(1)
        _pid = i.group(2)
        if not ports.has_key(_pid):
            ports[_pid] = [_port]
        else:
            ports[_pid].append(_port)
    names = {}
    c = 0
    for i in re.finditer(p2, buf):
        _name = i.group(1)
        _pid = i.group(2)
        if _name:
            names[_pid] = _name
        else:
            _name = i.group(3)
            _pid = i.group(4)
            names[_pid] = _name

    print '-' * 79
    for d in names:
        if ports.has_key(d):
            print 'Process', names[d], '(pid %s)' % d, 'ports:', ', '.join(ports[d])
    print '-' * 79
    raw_input('Press ENTER key to continue ...')
    [/code]

    使用管道,替换掉前边创建文件,读写文件的过程。
    [code]buf = ''
    p = popen('netstat -nao', bufsize=1024, stdout=pipe)
    buf += p.stdout.read()
    p = popen('tasklist', bufsize=1024, stdout=pipe)
    buf += p.stdout.read()[/code]

    感谢[b]mrshelly[/b]的提示。



  • 分享一个自己编写的脚本,用于查看进程都监听了哪些端口。
    代码如下:
    [code]from subprocess import Popen as popen
    import re
    import os

    fname = 'tmp.txt'
    fout = open(fname, 'wb')
    p = popen('netstat -nao', stdout=fout)
    p.wait()
    p = popen('tasklist', stdout=fout)
    p.wait()
    fout.close()

    fin = open(fname, 'rb')
    buf = fin.read()
    fin.close()
    os.remove(fname)

    p1 = ':(\d{1,5}) +?.+?LISTENING +?(\d{1,5})'
    p2 = '(.+?)  +?(\d{1,5}) Console|(.+?)  +?(\d{1,5}) Services'

    ports = {}
    for i in re.finditer(p1, buf):
        _port = i.group(1)
        _pid = i.group(2)
        if not ports.has_key(_pid):
            ports[_pid] = [_port]
        else:
            ports[_pid].append(_port)
    names = {}
    c = 0
    for i in re.finditer(p2, buf):
        _name = i.group(1)
        _pid = i.group(2)
        if _name:
            names[_pid] = _name
        else:
            _name = i.group(3)
            _pid = i.group(4)
            names[_pid] = _name

    print '-' * 79
    for d in names:
        if ports.has_key(d):
            print 'Process', names[d], '(pid %s)' % d, 'ports:', ', '.join(ports[d])
    print '-' * 79
    raw_input('Press ENTER key to continue ...')
    [/code]

    使用管道,替换掉前边创建文件,读写文件的过程。
    [code]buf = ''
    p = popen('netstat -nao', bufsize=1024, stdout=pipe)
    buf += p.stdout.read()
    p = popen('tasklist', bufsize=1024, stdout=pipe)
    buf += p.stdout.read()[/code]

    感谢[b]mrshelly[/b]的提示。



  • 主要的思路是综合Windows下的两个命令“netstat”和“tasklist”的输出,分析出本机上的进程都监听了哪些端口。



  • 原打算使用StringIO对象,但是popen报错,说StringIO对象没有fileno属性,只能替换成文件对象。不知道各位有没有可以替代的方法,使用内存,不用在磁盘上生成临时文件。



  • 不错支持一下....

    Tags 是用英文","分隔的...
    另:  请参考:
    http://docs.python.org/library/tempfile.html
    &
    http://docs.python.org/library/stringio.html



  • 谢谢。有没有办法把popen出的进程输出重定向到内存,而不用在磁盘建立临时文件?



  • [code]
    ...
    >>> pop = subprocess.Popen('cmd /c dir', stdin=subprocess.PIPE, stdout=subproces
    s.PIPE, close_fds=False)
    >>> print pop.stdout.read()
    ...
    [/code]


  • 管理员

    试试[url=http://code.google.com/p/psutil/]psutil[/url] 模块,你可以更优雅的实现你要的功能,而且更重要的是它是夸平台的。



  • [quote author=mrshelly link=topic=2704.msg9101#msg9101 date=1324369221]
    [code]
    ...
    >>> pop = subprocess.Popen('cmd /c dir', stdin=subprocess.PIPE, stdout=subproces
    s.PIPE, close_fds=False)
    >>> print pop.stdout.read()
    ...
    [/code]
    [/quote]

    谢谢你的提示,通过使用管道很好的处理了这个问题。



  • [quote author=digitalsatori link=topic=2704.msg9102#msg9102 date=1324369661]
    试试[url=http://code.google.com/p/psutil/]psutil[/url] 模块,你可以更优雅的实现你要的功能,而且更重要的是它是夸平台的。
    [/quote]

    谢谢你的建议,看了psutil包的介绍,功能很强大。在系统管理上会很有用。



  • psutil 官方没有放出 编译版本 相当麻烦啊...

    自己编译也很麻烦...



  • [quote author=mrshelly link=topic=2704.msg9105#msg9105 date=1324437122]
    psutil 官方没有放出 编译版本 相当麻烦啊...

    自己编译也很麻烦...
    [/quote]

    现在已放出了编译版本,首页上有2.7和3.2的下载链接。



  • 看到了. 也有2.4,2.5的下载链接.

    晚上试了一下. 是个蛮强大的扩展... 很棒..... 看来可以用OE做一些服务器管理的模块了....


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待