두 가지 프로그램이 있습니다. C++로 작성된 첫 번째 (subprocess.cpp
) :python stdout.flush()는 ' n'과 같은 마지막 흰색 글자를 플러시하지 않습니다.
#include <stdio.h>
int main() {
char * line = new char[1000];
// first scan
scanf("%s\n", line);
printf("%s\n", line);
fflush(stdout);
// second scan
scanf("%s\n", line);
printf("%s\n", line);
fflush(stdout);
return 0;
}
이 프로그램은 단순히 표준 입력에서 두 개의 문자열을 얻고 결국 세척, 표준 출력에에서 인쇄합니다. 다음은 파이썬 2.7로 작성된 두 번째 프로그램 (test.py
)이다 :이 스크립트는 subproccess을 시작 보내고 두 문자열을 검색해야
from subprocess import Popen
from subprocess import PIPE
from subprocess import Popen
# create process
my_process = Popen("./subprocess", stdin = PIPE, stdout = PIPE)
# send initial data
my_process.stdin.write('abc\n')
my_process.stdin.flush()
my_process.stdin.write('xyz\n')
my_process.stdin.flush()
# read data from subprocess
print "Subprocess line 1 :: " + str(my_process.stdout.readline())
print "Subprocess line 2 :: " + str(my_process.stdout.readline())
은. happpening 무엇 봐 :
[email protected] ~/Desktop/inzynierka $ g++ subprocess.cpp -o subprocess
[email protected] ~/Desktop/inzynierka $ python test.py
Subprocess line 1 :: abc
test.py
프로그램 subprocess
에서 두 번째 줄을 기다리고 있습니다. 프로그램 subprocess
은 '\ n'문자를 기다리고 있기 때문에 두 번째 문자열을 보낼 수 없습니다.
subprocess.cpp
에서 scanf
을 두 번째로 변경하면 scanf("%s\n", line);
(아니 \n
) 모두 정상적으로 작동합니다.
# send initial data
my_process.stdin.write('abc\n')
my_process.stdin.flush()
my_process.stdin.write('xyz\n')
my_process.stdin.flush()
my_process.stdin.write('ADDITIONAL\n')
my_process.stdin.flush()
파이썬 (변경된는 scanf와 예 참조) 세척 후에는 마지막 \ n을 문자를 보내지 않는 것 같습니다 : 나는 test.py
에서 하나 개의 추가 라인을 보낼 때 같은 문제가 발생합니다. test.py
에 쓰기 및 플러시를 한 개 더 추가하면 누락 된 \ n 문자가 플러시 후에 버퍼에 남아 있음이 증명됩니다.
어떻게해야합니까? 파이썬에서 모든 문자를 지우는 방법?
동의하신 문제는 파이썬이 아닌 scanf 형식 문자열에 '\ n'을 사용하는 것입니다. 사실, 단지'scanf ("% s", line)'은 효과가 있고'(int)에 따라'('line()'이된다. –
감사합니다. 문제가 Python 자체에 있지 않다는 것을 전혀 알지 못했습니다. –