我已经从
创建了一个字符串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')
但它找不到字符串序列。我能想到的唯一原因是因为字符串是多行的。我该如何处理?
答案 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