gpt4 book ai didi

java - 从 python 到 stdin java 的 stdout

转载 作者:行者123 更新时间:2023-11-30 03:31:56 24 4
gpt4 key购买 nike

我有一个从 python 到 java 中的 stdin 的标准输出。

我正在使用

Python代码

p = subprocess.Popen(command, stdout = subprocess.PIPE, stdin = subprocess.PIPE)
p.stdin.write("haha")
print "i am done" #it will never hit here

Java代码

Scanner in = new Scanner(System.in)
data = in.next()// the code blocks here

基本上发生的事情是子进程运行 jar 文件 ---> 它会阻塞,因为标准输入仍然阻塞,因为它没有显示任何内容

最佳答案

python:

p.stdin.write("haha")

java:

Scanner in = new Scanner(System.in)
data = in.next()

来自Java Scanner docs :

By default, a scanner uses white space to separate tokens. (White space characters include blanks, tabs, and line terminators.

您的 python 代码不会写入扫描器识别为 token 末尾的任何内容,因此扫描器会坐在那里等待读取更多数据。换句话说,next() 读取输入,直到遇到空格字符,然后返回读入的数据,减去终止空格。

这段Python代码:

import subprocess

p = subprocess.Popen(
[
'java',
'-cp',
'/Users/7stud/java_programs/myjar.jar',
'MyProg'
],
stdout = subprocess.PIPE,
stdin = subprocess.PIPE,
)


p.stdin.write("haha\n")
print "i am done"
print p.stdout.readline().rstrip()

...用这个java代码:

public class MyProg {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String data = in.next();

System.out.println("Java program received: " + data);
}
}

...产生以下输出:

i am done
Java program received: haha

关于java - 从 python 到 stdin java 的 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28823052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com