안녕하세요 내가 파이썬 서브 프로세스 모듈에 문제가 차단 될 때 공정 (예 : 자녀의 표준 입력, 표준 출력)파이썬 <p =는 popen ([ "명령", 표준 출력 = PIPE)> p.stdout.read는 (-1)</p> <p>제가 아이 작용하려는
이것은 어린이 프로그램의 코드
1 #include <stdio.h>
2
3 int main(){
4 char buf[1024];
5 printf("asdfsadfasff\n");
6 scanf("%s",buf);
7 printf("%s\n",buf);
8 }
이 코드는 매우 간단합니다, 문자열을 인쇄 입력을 기다린 인쇄 입력 문자열
와 다음, 파이썬 코드입니다. 이 경우
1 #!/usr/bin/python
2 from subprocess import *
3
4 fd = Popen(["./random"],stdin=PIPE,stdout=PIPE)
5 print "pid = %d"%(fd.pid) # print pid
6 result = ""
7 result = fd.stdout.read(-1) # read
8 print result
9 fd.stdin.write("write write write!!!\n")
10 result = fd.stdout.read(-1)
11 print result
아래, 나는이 프로그램이 잘 작동합니다 기대하지만, 라인 7 (fd.stdout.read이 (-1) 차단 결코 내가 함수의 PARAM을 읽을 변경
작동되지 않았다 (읽기 (1), read (1), read(), read (1024))하지만 모두 작동하지 않습니다.
그러나 처음에는 stdin에 문자열을 줄 때 프로그램이 작동했습니다.
나는이 문제에 대한 해결책이 있습니까 이것은 단지 내 opnion
입니다 ... 프로그램이 종료 될 때 자녀의 표준 출력 버퍼가 입력되지 않았습니다 생각하십니까?
편집 1. 내가 처음 인쇄 문자열 인 프로그램을 실행, 및 "sudo를 쓰에" 로 사용자의 입력을 기다릴 때 이 내가
내가 이해할 수없는 기대 것을 잘 작동 왜이 경우 작업도
1 from subprocess import *
2
3 fd = Popen(["sudo","su"],stdin=PIPE,stdout=PIPE)
4
5 print fd.stdout.read(-1)
6 print fd.stdin.write("asdfasdfas\n")
첫 번째'printf' 후에'flush (stdout);하면 어떻게 될까요? – mgilson
분명히 C 함수는'fflush'입니다 ... 죄송합니다. C가 조금 녹슬 었습니다. – mgilson
1 #include 3 int main() { 4 char buf [10]; 5 printf ("asdfsadfasff \ n"); 6 fflush (stdout); 7 scanf ("% s", buf); 8 printf ("% s \ n", buf); 9} fflush를 추가했지만 결과가 변경되지 않았으므로 fflush를 시간 초과하는 데 실수가 있습니까? –