0

Python バージョン 2.7.9 を使用しています。Popen プロセスから行を読み取ろうとすると、プロセスが終了するまでスタックします。終了する前に標準入力から読み取るにはどうすればよいですか?

入力が '8200' (正しいパスワード) の場合、出力が表示されます。しかし、パスワードが '8200' から変更された場合、出力がないのはなぜですか?

サブプロセスのソース コード:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char password[10];
    int num;
    do
    {
        printf("Enter the password:");
        scanf("%s", &password);

        num = atoi(password);

        if (num == 8200)
            printf("Yes!\n");
        else
            printf("Nope!\n");
    } while (num != 8200);

    return 0;
}

Python ソース:

from subprocess import Popen, PIPE

proc = Popen("Project2", shell=True, stdin=PIPE,stdout=PIPE,stderr=PIPE)
#stdout_data = proc.communicate(input='8200\r\n')[0]
proc.stdin.write('123\r\n')
print proc.stdout.readline()
4

1 に答える 1

0

printf を次のように変更した場合

printf("Enter the password:\n");

そしてフラッシュを追加

fflush (stdout);

バッファがフラッシュされます。フラッシュとは、バッファがまだいっぱいになっていない場合でも、データが書き込まれることを意味します。\n を強制的に改行するには、\n を追加する必要があります。

proc.stdout.readline();

Python では readline を追加しました。次に、次のようになりました。

proc = Popen("Project2", shell=True, stdin=PIPE,stdout=PIPE,stderr=PIPE)
proc.stdout.readline()
proc.stdin.write('123\r\n')
print proc.stdout.readline()

これが起こっていることです:

  1. python はサブプロセスを実行します
  2. subprocess write "パスワードを入力してください:\n"
  3. pythonは「パスワードを入力してください:」という行を読み取り、それに対して何もしません
  4. Pythonはサブプロセスに「123」を書き込みます
  5. サブプロセスは123を読み取ります
  6. サブプロセスは、123 が 8200 であるかどうかをチェックします。これは false であり、「Nope!」と応答します。
  7. "いいえ!" Pythonによって読み取られ、コードの最後の行で標準出力に出力されます
于 2015-04-22T15:26:22.273 に答える