Сценарий Python с использованием p.stdout.read () stty: стандартный ввод: неверный аргумент

1

Пытается запустить скрипт python, который использует SUDO SU, и передает управление оболочке для запуска сценария ksh. Он работает нормально, но stdout дает мне ошибку, которую я хотел бы решить

Вызов этого через ANSIBLE Tower или напрямую: python test.py NEWPASS

#!/usr/bin/env python

'''
Python script for Oracle
Called by the following
        SYS_SYSTEM_PASSWORD_CHANGE {{PASSWD}}
'''

import os
import sys
import re
import argparse
import textwrap
import subprocess
#import commands

# RUNPROC process.
def runproc():
    print('RUNNING PASSWORD CHANGE')
    cmds = ['sudo su - ' +runas +'/orasoft/scripts/password_change.ksh ' +npass]
    p = subprocess.Popen('/bin/bash', shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
    for cmd in cmds:
      print(cmd)
      p.stdin.write(cmd)
    p.stdin.close()
    print(p.stdout.read())

def get_command():

    parser = argparse.ArgumentParser(prog='PROG',formatter_class=argparse.RawDescriptionHelpFormatter,
           description=textwrap.dedent('''\
              '''))
    parser.add_argument('passwd')
    args = parser.parse_args()
    global npass
    npass = args.passwd
    print('NEW PASS:  ' +npass)

    proc = subprocess.Popen("ls -latr /etc/oratab | tr -s ' ' | cut -f3 -d' '",stdout=subprocess.PIPE, shell=True)
    global runas
    (runas, err) = proc.communicate()
    #runas = runas.decode("utf-8")
    print('RUNNING AS:  ' +runas)
    #print(runas.decode("utf-8"))

    runproc()

# -- begin fetching commands
get_command()

Все передано правильно, и скрипты вызывается правильно, но я не понимаю неправильную ошибку аргумента. Вот результат теста:

CDB001@y81dev00-> python test.py NEWPASS
NEW PASS:  NEWPASS
RUNNING AS:  oracle

RUNNING PASSWORD CHANGE
sudo su - oracle
/orasoft/scripts/password_change.ksh NEWPASS

**stty: standard input: Invalid argument**
CHANGING PASSWORDS ON:     DATABASE:  CDB001  NEW_PASSWORD:  NEWPASS  RUNNING AS:  oracle

NAME
---------
CDB001
  • 0
    Используйте communicate (снова) вместо write - close - read чтобы избежать риска тупика.
  • 0
    Вашему процессу /bin/bash не требуется shell=True (и, следовательно, его не следует использовать).
Показать ещё 2 комментария
Теги:

1 ответ

0

Удаление ошибки (-) из sudo su разрешило ошибку. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню