Справочная информация: Я получаю данные из двух баз данных и сравниваю значения, а когда они отличаются, я распечатываю их. Существует также еще одна проверка, если значение «Diagnostical» не содержит путь Oracle_base, а затем распечатывается. Теперь проблема в том, что без аргументов командной строки код работает отлично, и как только я использую командную строку, вывод, похоже, пропускает некоторые итерации. См. Выставку ниже;
с использованием моего стандартного кода ниже:
import cx_Oracle
import smtplib
import os, sys
import string
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
conn_string = cx_Oracle.connect('hr/orpassword@xe')
cursor1=conn_string.cursor()
cursor2=conn_string.cursor()
cursor1.execute("SELECT p.name,p.value FROM v$parameter p ORDER BY p.name")
results1 = cursor1.fetchall()
cursor2.execute("SELECT p.name,p.value FROM v_param p ORDER BY p.name")
results2 = cursor2.fetchall()
orabase=''
with open('file.txt', 'w') as f:
# print('hello world', file=f)
for index in range(0,len(results1)):
if (results1[index][0]=='audit_file_dest'):
orabase=results1[index][1].rsplit("\ADMIN")[0]
if (results2[index][0]=='diagnostic_dest' and results2[index][1].__contains__(orabase)):
continue
elif (results2[index][0]=='diagnostic_dest'):
print ('Diagnostic_dest does not contain ORACLE_BASE',orabase, file=f)
print("####################################################################", file=f)
if (results2[index] == results1[index]):
continue
print ('Drift found on ',conn_string.tnsentry," - ",results1[index],":",conn_string.tnsentry," - ",results2[index], file=f)
Вывод:
Diagnostic_dest does not contain ORACLE_BASE C:\ORACLEXE\APP\ORACLE
####################################################################
Drift found on xe - ('diagnostic_dest', 'C:\\ORACLEXE\\APP\\ORACLE') : xe - ('diagnostic_dest', '+FRA')
Drift found on xe - ('shared_pool_size', '0') : xe - ('shared_pool_size', '5')
Drift found on xe - ('streams_pool_size', '0') : xe - ('streams_pool_size', '8')
Используя аргументы командной строки с кодом ниже:
import cx_Oracle
import os, sys
import string
def DriftsCheck(puser,ppswd,psid,duser,dpswd,dsid):
conn_string1=cx_Oracle.connect(puser+'/'+ppswd+'@'+psid)
conn_string2=cx_Oracle.connect(duser+'/'+dpswd+'@'+dsid)
cursor1=conn_string1.cursor()
cursor2=conn_string2.cursor()
# try :
cursor1.execute("SELECT p.name,p.value FROM v$parameter p ORDER BY p.name")
results1 = cursor1.fetchall()
cursor2.execute("SELECT p.name,p.value FROM v_param p ORDER BY p.name")
results2 = cursor2.fetchall()
orabase=''
with open('file.txt', 'w') as f:
# print('hello world', file=f)
for index in range(0,len(results1)):
if (results1[index][0]=='audit_file_dest'):
orabase=results1[index][1].rsplit("\ADMIN")[0]
if (results2[index][0]=='diagnostic_dest' and results2[index][1].__contains__(orabase)):
continue
elif (results2[index][0]=='diagnostic_dest'):
print ('Diagnostic_dest does not contain ORACLE_BASE',orabase, file=f)
print("####################################################################", file=f)
if (results2[index] == results1[index]):
continue
print ('Drift found on ',conn_string1.tnsentry," - ",results1[index],":",conn_string2.tnsentry," - ",results2[index], file=f)
return
# except:
# print ('An errors was encountered')
if __name__ == '__main__':
puser= sys.argv[1]
ppswd= sys.argv[2]
psid= sys.argv[3]
duser= sys.argv[4]
dpswd= sys.argv[5]
dsid= sys.argv[6]
DriftsCheck(puser,ppswd,psid,duser,dpswd,dsid)
Вывод для вывода из командной строки:
$ python python_tut/DriftsCheck.py hr orpassword xe hr orpassword xe
Drift found on xe - ('diagnostic_dest', 'C:\\ORACLEXE\\APP\\ORACLE') : xe - ('diagnostic_dest', '+FRA')