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

2 投票
3 回答
5801 浏览
提问于 2025-04-16 22:58

我创建了一个字符串,内容来自

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

撰写回答