亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1540 | 回復(fù): 4
打印 上一主題 下一主題

這段代碼問題出在哪里? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-04-27 17:30 |只看該作者 |倒序?yàn)g覽
#! /usr/bin/env python
#coding=utf-8

from cStringIO import StringIO
import re

vhost_start=re.compile(r'<VirtualHost\s+(.*?)>')
vhost_end=re.compile(r'</VirtualHost>')
docroot=re.compile(r'(DocumentRoot\s+)(\S+)')

def replace_docroot(conf_string,vhost,new_docroot):
    confile=StringIO(conf_string)
    in_host=False
    curr_vhost=None
    for line in confile:
        vhost_start_match=vhost_start.search(line)
        if vhost_start_match:
            curr_vhost=vhost_start_match.groups()[0] #所以group() 和group(0)返回,匹配的整個(gè)表達(dá)式的字符串
            in_host=True
        if in_host and (curr_vhost==vhost):
            docroot_match=docroot.search(line)
            if docroot_match:
                sub_line=docroot.sub(r'\1%s' % new_docroot,line)
                line=sub_line
        vhost_end_match=vhost_end.search(line)
        if vhost_end_match:
            in_host=False
        yield line

if __name__=='__main__':
    import sys
    confile=sys.argv[1]
    vhost=sys.argv[2]
    docroot=sys.argv[3]
    conf_string=open(confile).read()
    for line  in replace_docroot(conf_string, vhost, docroot):
        print line,


執(zhí)行結(jié)果是

python 13.py  httpd.conf *:80  /home/html/support.xxx.com

Traceback (most recent call last):
File "13.py", line 36, in ?
    for line  in replace_docroot(conf_string, vhost, docroot):
  File "13.py", line 21, in replace_docroot
    docroot_match=docroot.search(line)
AttributeError: 'str' object has no attribute 'search'

哪位大大能幫我看看

論壇徽章:
1
15-16賽季CBA聯(lián)賽之新疆
日期:2017-03-09 12:33:45
2 [報(bào)告]
發(fā)表于 2013-04-27 18:52 |只看該作者
回復(fù) 1# tianer

在函數(shù)的開始加global docroot
   

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2013-04-28 10:43 |只看該作者
回復(fù) 2# jeppeter


    你好,加了還是有報(bào)錯(cuò)

#! /usr/bin/env python
#coding=utf-8

from cStringIO import StringIO
import re

global docroot
vhost_start=re.compile(r'<VirtualHost\s+(.*?)>')
vhost_end=re.compile(r'</VirtualHost>')
docroot=re.compile(r'(DocumentRoot\s+)(\S+)')

def replace_docroot(conf_string,vhost,new_docroot):
    confile=StringIO(conf_string)
    in_host=False
    curr_vhost=None
    for line in confile:
        vhost_start_match=vhost_start.search(line)
        if vhost_start_match:
            curr_vhost=vhost_start_match.groups()[0] #所以group() 和group(0)返回,匹配的整個(gè)表達(dá)式的字符串
            in_host=True
        if in_host and (curr_vhost==vhost):
            docroot_match=docroot.search(line)
            if docroot_match:
                sub_line=docroot.sub(r'\1%s' % new_docroot,line)
                line=sub_line
        vhost_end_match=vhost_end.search(line)
        if vhost_end_match:
            in_host=False
        yield line

if __name__=='__main__':
    import sys
    confile=sys.argv[1]
    vhost=sys.argv[2]
    docroot=sys.argv[3]
    conf_string=open(confile).read()
    for line  in replace_docroot(conf_string, vhost, docroot):
        print line,

python 13.py  httpd.conf *:80  /home/html/support.xxx.com
Traceback (most recent call last):
  File "13.py", line 37, in ?
    for line  in replace_docroot(conf_string, vhost, docroot):
  File "13.py", line 22, in replace_docroot
    docroot_match=docroot.search(line)
AttributeError: 'str' object has no attribute 'search'

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2013-04-28 11:11 |只看該作者
有兩個(gè)問題:

1. Docroot定義了兩次:

第一次:

   vhost_start=re.compile(r'<VirtualHost\s+(.*?)>')
vhost_end=re.compile(r'</VirtualHost>')
docroot=re.compile(r'(DocumentRoot\s+)(\S+)')

第二次,main函數(shù)中:

if __name__=='__main__':
    import sys
    confile=sys.argv[1]
    vhost=sys.argv[2]
    docroot=sys.argv[3]
    conf_string=open(confile).read()
    for line  in replace_docroot(conf_string, vhost, docroot):
        print line,

從報(bào)錯(cuò)的地方看,顯然函數(shù) replace_docroot 傳入的參數(shù)docroot只是個(gè)字符串,不是re模塊compile出來的正則表達(dá)式集合。 所以字符串沒有search方法。

你自己看看replace_docroot函數(shù)中用的docroot到底應(yīng)該是哪一個(gè)? 最好的辦法,將下面的代碼:
vhost_start=re.compile(r'<VirtualHost\s+(.*?)>')
vhost_end=re.compile(r'</VirtualHost>')
docroot=re.compile(r'(DocumentRoot\s+)(\S+)')
直接移到函數(shù)replace_docroot中。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2013-04-28 14:08 |只看該作者
回復(fù) 4# ts32767


    果然是這樣,謝謝了。終于解決了
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP