Python:如何在多行字符串中搜索特定内容
我创建了一个字符串,内容来自
connectString = 'D:\Database\10.2.0\BIN\sqlplus.exe -L sys/PASSWORD'
output = str(call(connectstring))
这个是打印输出的结果
stuff stuff stuff
stuff even more stuff
ORA-28009
stuff stuff
stuff and stuff
我做了
output.find('ORA-28009')
但是它找不到这个字符串的顺序。我能想到的唯一原因是因为这个字符串是多行的。我该怎么处理这个问题呢?
3 个回答
0
试着把
output = str(call(connectstring))
换成
output = str(check_output(connectstring))
这样可以从命令的输出中获取字节数据。
2
试着把字符串规范化,去掉特殊字符。我用的函数是这样的:
def trim (str):
str = str.replace(' ', '')
str = str.replace('\s', '')
str = str.replace('\t', '')
str = str.replace('\r', '')
str = str.replace('\n', '')
return str
也许你可以根据自己的情况调整一下。祝好,Ste
0
这是我解决问题的方法。sPath这个变量是必要的,因为我在同一台服务器上有两个独立的Oracle实例。为了正确测试sys账户的密码,我需要在特定的目录下运行sqlplus,并使用那个实例的正确密码。
def startSQLHelper(self, sPath, sPassword):
print '--starting SQL helper--'
args = [sPath + 'sqlplus.exe', '-L', 'sys/'+sPassword]
return subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def checkOraPass (self, sPath, sPassword):
print '--checkOraPass--'
p = self.startSQLHelper(sPath, sPassword)
output = p.communicate()[0]
print output
if output.find('ORA-28009') != -1:
print 'Password passed'
return True
return False