0
サブプロセスの出力を取得してログインを求め、残りのスクリプトを続けてログインしようとしていますが、しかし、私のユーザー名とパスワードを入力した後、私は次のエラーを取得する:Python3のログインシェルコマンドを使用したリアルタイム出力
以下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()
私は通常、それがログイン後に何も返さないシェルからコマンドを実行すると
['Popen.communicate':プロセスとの対話:データをstdinに送ります。ファイルの終わりに達するまで、stdoutとstderrからデータを読み込みます。 **プロセスが終了するのを待つ**](https://docs.python.org/3.5/library/subprocess.html#subprocess.Popen.communicate) – jwodder
'output'はプロセスがstdoutに書き込んだものですあなたがstdoutをリダイレクトしていないので空でなければなりません。 'err'は' stderr'に書いたものです。 'shell = True'を避け、代わりに' subprocess.Popen([cmd、 '-login']、stderr = subprocess.PIPE)を ' –