0

Pythonで実行中のプロセスのSTDINに文字列/データを送信する方法は?

CLI プログラムのフロント エンドを作成したいと考えています。例えば。この Pascal アプリケーションに複数の文字列を渡したい:

program spam;
var a,b,c:string;
begin
while e <> "no" do
begin
    writeln('what is your name?');
    readln(a);
    writeln('what is your quest?');
    readln(b);
    writeln('what is your favorite color?');
    readln(c);
    print(a,b,c);
end;
end.

Python からこのプログラムに文字列を渡すにはどうすればよいですか (Python のサブプロセス モジュールを使用)。ありがとうございました。私の英語でごめんなさい。

4

1 に答える 1

2

別の対話型プログラムを制御したい場合は、Pexpect モジュールを試してみる価値があります。プロンプト メッセージなどを探し、プログラムと対話するように設計されています。現在、Windows では直接動作しないことに注意してください。Cygwin では動作します。

Cygwin 以外の Windows バリアントとして考えられるのはWinPexpectで、これは this questionで見つけました。その質問に対する回答の 1 つは、WinPexpect の最新バージョンがhttp://sage.math.washington.edu/home/goreckc/sage/wexpect/にあることを示唆していますが、変更日を見ると、BitBucket (最初のリンク) が実際に最新です。

Windows 端末は Unix 端末とは多少異なるため、直接的なクロスプラットフォーム ソリューションはないと思います。ただし、WinPexpect のドキュメントによると、それと pexpect の API の唯一の違いは spawn 関数の名前です。両方で動作させるには、おそらく次の(テストされていない)コードのようなことを行うことができます。

try:
    import pexpect
    spawn = pexpect.spawn
except ImportError:
    import winpexpect
    spawn = winpexpect.winspawn

# NB. Errors may occur when you run spawn rather than (or as
# well as) when you import it, so you may have to wrap this 
# up in a try...except block and handle them appropriately.
child = spawn('command and args')
于 2012-06-18T07:56:08.167 に答える