popenを使用して実行した場合、またはサブプロセスライブラリで実行した場合、Pythonで入力プロンプトを独自の行に出力するにはどうすればよいですか?

Dinoswarleafs

私の質問を説明するために、次の例を作成しました。

student_file.pyが次のようになっているとしましょう:

curr_year = int(input("Enter year: "))
print(f"Next year is {curr_year + 1}")

したがって、プログラムを実行すると、ターミナルでの出力は次のようになります。

Enter year: 4323
Next year is 4324

私の場合、この学生ファイルを使用して複数の入力を使用する別のプログラムを実行しているため、目的の出力は次のようになります。

Enter year: 
Next year is 3234
Enter year: 
Next year is 3112
Enter year: 
Next year is 1322
Enter year: 
Next year is 2222

ただし、たとえばtemp.pyの現在のコードスニペットでは、次のようになります。

from subprocess import Popen, PIPE
year_list = ['3233\n', '3111\n', '1321\n', '2221']
for year in year_list:
    p = Popen(["python3", "student_file.py"], stdout=PIPE, stdin=PIPE, encoding="ascii")
    output = p.communicate(input=year)[0]
    print(output, end="")

現在、出力は次のとおりです。

Enter year: Next year is 3234
Enter year: Next year is 3112
Enter year: Next year is 1322
Enter year: Next year is 2222

他のファイルをテストしているので、student_file.pyをまったく変更せず、test.pyのみを変更したいと思います。これは可能ですか?これを達成するために、それがこの望ましい出力を達成する限り、それがpopen、run、または他の何かであるかどうかにかかわらず、私はこれを達成するために任意の方法を使用しても問題ありません。

ありがとうございました。

マヘシC.レグミ

ちょっとした回避策:)

from subprocess import Popen, PIPE
year_list = ['3233\n', '3111\n', '1321\n', '2221']
for year in year_list:
    p = Popen(["python3", "student_file.py"], stdout=PIPE, stdin=PIPE, encoding="ascii")
    output = p.communicate(input=year)[0]
    print(output.replace(": ",": \n"), end="")

Pexpectの使用

import pexpect
year_list = ['3233', '3111', '1321', '2221']
for year in year_list:
    child = pexpect.spawn("python student_file.py")

    child.sendline(year)
    lines = [i.decode('utf-8').rstrip() for i in child.readlines()]
    for line in lines:
        print(line)
``

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ