Python:如何在多行字符串中搜索特定内容

时间:2011-08-05 15:35:01

标签: python string find

我已经从

创建了一个字符串
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 :(得分: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

答案 1 :(得分:0)

尝试替换

output = str(call(connectstring))

output = str(check_output(connectstring))

返回命令输出中的字节。

答案 2 :(得分: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