(я новичок в Java)
Мне нужно запустить процесс и получить 2 или 3 дескриптора: для STDIN, STDOUT (и STDERR), чтобы я мог записывать ввод в процесс и получать его вывод так же, как ведут себя каналы командной строки (например, «grep») 1001 *
в Python это достигается с помощью следующего кода:
from subprocess import Popen, PIPE
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE)
(child_stdin, child_stdout) = (p.stdin, p.stdout)
child_stdin.write('Yoram Opposum\n')
child_stdin.flush()
child_stdout.readlines()
Что такое эквивалент Java?
Я уже пробовал
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader inp = new BufferedReader( new InputStreamReader(p.getInputStream()) );
BufferedWriter out = new BufferedWriter( new OutputStreamWriter(p.getOutputStream()) );
out.write( "Some Text!\n\n" );
out.flush();
line = inp.readLine();
print("response1: " + line ); // that's ok
out.write( "Second Line...\n" );
out.flush();
line = inp.readLine();
print("response2: " + line ); // returns an empty string, if it returns,,,
inp.close();
out.close();
Кстати, первая попытка работает только с \ n \ n, но не работает с одним \ n (почему?)
следующий код работает, но все входные данные даны заранее, а не поведение, которое я ищу:
out.write( "Aaaaa\nBbbbbb\nCcccc\n" );
out.flush();
line = inp.readLine();
print("response1: " + line );
line = inp.readLine();
print("response2: " + line );
line = inp.readLine();
print("response3: " + line );
line = inp.readLine();
print("response4: " + line );
выход:
response1: AAAAA
response2:
response3: bbbbbb
response4:
запускаемый процесс выглядит так:
s = sys.stdin.readline()
print s.upper()
s = sys.stdin.readline()
print s.lower()