Как мне подключить sqlplus как sudo к пользователю оракула, используя модуль подпроцесса python? - PullRequest
0 голосов
/ 23 января 2019

У меня есть скрипт на python, принадлежащий пользователю root, и я пытаюсь запустить команды sqlplus как sudo для пользователя oracle. Но возникают проблемы, такие как oracle_home not set

import os,subprocess
query = '''
WHENEVER SQLERROR EXIT FAILURE
SET FEEDBACK OFF
SET HEAD OFF
SET EMB ON PAGES 0 NEWP
SET LINE 10000
SELECT * from dual;
EXIT;
'''
dbsession = subprocess.Popen(["/usr/bin/sudo","-u","oracle","/orahome/Database/db12c/bin/sqlplus", "-S", "/ as sysdba"], stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE,env={"ORACLE_SID": "EMREP", "ORACLE_HOME": "/orahome/Database/db12c"})
dbsession.stdin.write(query)
query_result = dbsession.communicate()
print(query_result, dbsession.returncode

output

(('', 'Error 6 initializing SQL*Plus\nSP2-0667: Message file sp1<lang>.msb not found\nSP2-0750: You may need to set ORACLE_HOME to your Oracle software directory\n'), 1)

1 Ответ

0 голосов
/ 05 февраля 2019

Код ниже работает

import os,subprocess
query = '''
WHENEVER SQLERROR EXIT FAILURE
SET FEEDBACK OFF
SET HEAD OFF
SET EMB ON PAGES 0 NEWP
SET LINE 10000
SELECT * from dual;
EXIT;
'''
db_home=/orahome/Database/db12c
dbsession = subprocess.Popen(["/usr/bin/sudo","su","-","oracle","-c",""""""""+db_home+"""/bin/sqlplus -S / as sysdba"""""], stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE,env={"ORACLE_SID": "EMREP", "ORACLE_HOME": "+db_home+"})
dbsession.stdin.write(query)
query_result = dbsession.communicate()
print(query_result, dbsession.returncode)
...