У меня есть две программы. Сначала один (subprocess.cpp
) написана на C++: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;
}
Эта программа просто получает две строки из стандартного ввода и выводит в стандартный вывод на, промывка в конце концов. Вот вторая программа (test.py
) написана на Python 2.7:
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())
Этот скрипт должен запустить subproccess, отправить и получить две строки. Посмотрите, что 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
не может отправить 2-ю строку, потому что она ждет символа '\ n'.
Если я меняю второй scanf
на subprocess.cpp
на scanf("%s\n", line);
(нет \n
) все работает нормально. То же самое происходит, когда я отправить еще одну строку в test.py
:
# 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()
Кажется, что Python не посылает последнюю \ п символ после промывки (пример с измененной зсапЕ). Добавление одной дополнительной записи и флеша в test.py
доказывает, что отсутствующий символ \ n все еще находится в буфере после флеша.
Что с этим делать? Как сделать флеш Python для очистки всех символов?
Согласен, проблема заключается в использовании '\ n' в строке формата scanf, а не в Python. Фактически, просто 'scanf («% s », строка)' отлично работает или даже 'gets (line)' (в зависимости от намерения). –
Спасибо, я понятия не имел, что проблема не в самом Python. –