java:如何通过进程(stdin / stdout)从进程中读写数据

(我是Java新手)我需要启动一个进程并接收2或3个句柄:对于STDIN,STDOUT(和STDERR),因此我可以将输入写入进程并接收其输出,就像命令行管道一样表现(例如“

grep”)

在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()

回答:

好的,这也是我的python代码错误,但是与@Jon的回答相反,有一个EXTRA换行符(确切地说是0xA0,这不是Windows的标准)。

一旦我从Java获得的行中剥离()了额外的0xA0,python就会在返回的途中向Java添加一个“正常” \ n,并且运行顺利。

为了完整地回答问题,下面是一个有效的Java代码:

import java.io.*;

import java.util.*;

public class Main {

public static BufferedReader inp;

public static BufferedWriter out;

public static void print(String s) {

System.out.println(s);

}

public static String pipe(String msg) {

String ret;

try {

out.write( msg + "\n" );

out.flush();

ret = inp.readLine();

return ret;

}

catch (Exception err) {

}

return "";

}

public static void main(String[] args) {

String s;

String cmd = "c:\\programs\\python\\python.exe d:\\a.py";

try {

print(cmd);

print(System.getProperty("user.dir"));

Process p = Runtime.getRuntime().exec(cmd);

inp = new BufferedReader( new InputStreamReader(p.getInputStream()) );

out = new BufferedWriter( new OutputStreamWriter(p.getOutputStream()) );

print( pipe("AAAaaa") );

print( pipe("RoteM") );

pipe("quit")

inp.close();

out.close();

}

catch (Exception err) {

err.printStackTrace();

}

}

}

这是python代码

import sys

s = sys.stdin.readline().strip()

while s not in ['break', 'quit']:

sys.stdout.write(s.upper() + '\n')

sys.stdout.flush()

s = sys.stdin.readline().strip()

以上是 java:如何通过进程(stdin / stdout)从进程中读写数据 的全部内容, 来源链接: utcz.com/qa/415095.html

回到顶部