使用Python3的登录shell命令实时输出



我正在尝试获取子过程的输出以提示登录,然后一旦登录,请继续使用其余的脚本。我可以将其提示以进行登录,但是输入我的用户名和密码后,我会收到以下错误:

Traceback (most recent call last):
  File "./login.py", line 20, in <module>
    login()
  File "./login.py", line 13, in login
    output = login_cmd.stderr.read(1)
ValueError: read of closed file.

以下是脚本:

import subprocess, sys
raidcom = '/usr/bin/raidcom'
def login(cmd=raidcom):
    login_cmd = subprocess.Popen('{cmd} -login'.format(cmd=cmd),
                                 stderr=subprocess.PIPE, shell=True)
    (output, err) = login_cmd.communicate()
    while True:
        output = login_cmd.stderr.read(1)
        if output == '' and login_cmd.poll() != None:
            break
        if output != '':
            sys.stdout.write(output)
            sys.stdout.flush()
login()

当我通常从外壳执行命令时,登录后什么都没有返回。

我在这种情况下找到了另一种方法。我没有通过实时输出来提示用户的用户名和密码信息,并将这些信息插入命令中。以下功能有效:

import subprocess
import getpass
raidcom = '/usr/bin/raidcom'
def raidcom_login(cmd=raidcom):
    """Login to CCI and return its output."""
    horcm_user = input("Please enter your username for logging into CCI: ")
    horcm_pass = getpass.getpass("Please enter your password: ")
    try:
        login_cmd = subprocess.check_output('{cmd} -login {} {}'.format(horcm_user, horcm_pass, cmd=cmd),
                                 stderr=subprocess.PIPE, shell=True)
    except subprocess.CalledProcessError:
        print('Login failed')

最新更新