当我运行下面的代码时,我没有得到预期的输出。 请纠正我..
import socket
import re
NodeName=socket.gethostname()
change_hostname_list=['/etc/hosts1','/etc/sysconfig/network1']
for file in change_hostname_list:
infile=open(file,'r').read()
print NodeName
print file
if re.search('NodeName',file):
print "DOOO"
我需要输出" DOOO"
我得到了以下一个,
root@test06> python test.py
test06
/etc/hosts1
test06
/etc/sysconfig/network1
root@test06>
答案 0 :(得分:1)
替换这个:
if re.search('NodeName',file):
到:
if re.search(NodeName,infile):
你不需要变量引用,文件变量是列表中的文件名,变量文件中有文件的内容。
这是演示:
>>> import socket
>>> import re
>>> f = open('/etc/hosts')
>>> host_name = socket.gethostname()
>>> host_name
'hackaholic'
>>> for x in f:
... print(x)
... if re.search(host_name,x):
... print("found")
...
127.0.0.1 localhost
127.0.0.1 hackaholic
found # it founds the host name in file
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
答案 1 :(得分:1)
如果NodeName是字符串,则删除引号,它应该只在文件中进行字符串搜索。
import socket
import re
NodeName=socket.gethostname()
change_hostname_list=['/etc/hosts1','/etc/sysconfig/network1']
for file in change_hostname_list:
infile=open(file,'r').read()
print NodeName
print file
if re.search(NodeName,file):
print "DOOO"
如果你需要使用一些正则表达式的好东西,你可以连接变量来创建正则表达式字符串并将其传递给re.search
。
另外,如果你不需要任何正则表达式的东西,只需要普通的子字符串搜索,你可以使用字符串函数find
,如下所示:
if file.find(NodeName):
print "DOOO"
答案 2 :(得分:0)
您似乎将字符串'NodeName'
作为模式而不是变量re.search()
传递给NodeName
。删除您提供的代码第9行中的单引号。