1
メイン・スクリプトは、データのstdoutを継続的にチェックする新しいサブプロセスとスレッドで2番目のスクリプトを開始します。 2番目のスクリプトは入力を求めます。最初のスクリプトにユーザー入力を求めてから、2番目のスクリプトに渡したいと思います。私は窓で開発しているし、pexpectを動かすことができませんでした。スレッド・サブプロセスから別のスレッド・サブプロセスへの入力を送信
test.py - メインスクリプト
import threading
import subprocess
def read_output(process):
print("starting to read")
for line in process.stdout:
print (line.rstrip())
def write_output(process,s):
process.stdin.write(s.encode('utf-8'))
process.stdin.flush()
process = subprocess.Popen('python test2.py', shell=False,
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=None)
# Create new threads
thread1 = threading.Thread(read_output(process))
# Start new Threads
thread1.daemon=True
thread1.start()
s=input("test input:")
print("yep:"+s)
thread1.process.stdin.write(s.encode('utf-8'))
thread1.process.stdin.flush()
test2.py 2番目のスクリプト
print("Enter an input A,B,C:")
s=input("")
print("you selected:"+s)
問題を修正し、成功のための正しい軌道に乗せてくれてありがとうございました!私が間違っていても、標準入力が開いていても問題ない場合は、文字列sendはキャプチャされた入力で\ r \ n文字を送信しないということです。別の行 'process.stdin.write(" \ r \ n ".encode( 'utf-8'))を追加すると、すべてが期待どおりに動作し、追加書き込みのために標準入力が開いたままになります。または、それを閉じると簡単に標準入力を再開できますか? – kaminsknator
あなたは正しいです。すぐに終了しない場合は、CR + LFを送信する必要があります(これは、スレッドパラメータの問題が表示されなかったときに最初に試したものです)。入力を閉じるとプログラムをもう一度開くことはできませんので、プログラムを終了した時点です。 –
私は頭がおかしくなったことを明確にしてくれてありがとうと思う。 args =(process、)のプロセスの後のカンマは何ですか? – kaminsknator