プロセス内で対話型プログラムを呼び出し、プロセスの実行中にその出力を出力する必要があります。これまでのところ、私はこの関数でそれを行っています:
def call(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
line = process.stdout.readline().rstrip().encode("utf-8")
if line == '':
break
print(line)
process.wait()
return process.returncode
問題は、対話型プログラムがユーザー入力を待機し、質問の後に新しい行を追加しない可能性があることです。たとえば、次のようになります。
認証レルム:...>..。
ユーザー名:
「Username:」の後に改行はなく、プログラムはユーザー入力を予期しているため、コードに「Username:」が表示されません。
readline()の代わりにbytesavailableやread(size)のような関数が必要ですが、bytesavaiable()のような関数はありません。