Tag: 进程输入

从getInputStream正确关闭Java Process InputStream

我在文档中找不到对此的澄清。 但是当我们有一个Process对象并调用getInputStream() , 当我们完成它时,我们是否会得到一个我们应该明确关闭的新流? 或者我们是否得到了与流程相关的流,我们不应该关闭流程,但流程是否会关闭它? 基本上,我们应该如何与从Process.getInputStream()获得的流进行交互? 关闭还是不关闭?

具有并发输入/输出流的Java进程

我正在尝试创建一种控制台/终端,允许用户输入一个字符串,然后将其转换为一个进程并打印出结果。 就像一个普通的控制台。 但我无法管理输入/输出流。 我已经研究过这个post ,但是这个解决方案很遗憾不适用于我的问题。 与“ipconfig”和“cmd.exe”等标准命令一起,我需要能够运行脚本并使用相同的输入流来传递一些参数,如果脚本要求输入的话。 例如,在运行脚本“python pyScript.py”之后,如果它要求它(例如:raw_input),我应该能够将更多输入传递给脚本,同时还打印脚本的输出。 您期望从终端获得的基本行为。 到目前为止我得到了什么: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.text.BadLocationException; import javax.swing.text.Document; public class Console extends JFrame{ JTextPane inPane, outPane; InputStream […]

无法从Java进程读取InputStream(Runtime.getRuntime()。exec()或ProcessBuilder)

我正在尝试使用Java从外部启动一个进程,并且无法从其InputStream中读取任何内容。 如果我用“ls”,“ps”或“kill”等命令启动进程,一切正常。 我可以在InputStream或Process的ErrorStream上启动该过程并获取信息。 如果我尝试使用像“ftp”或“telnet”这样的命令,则在尝试读取时,InputStream和ErrorStream都会阻塞我的程序。 任何时候都不会通过这些流传递任何信息。 谁能解释一下这种行为? 这些命令是不可能的,还是我的实现有问题? String processName = _configuration.getProgramCommand().getCommand(); ProcessBuilder procBuilder = new ProcessBuilder(processName); System.out.println(“Starting process “+processName); _proc = Runtime.getRuntime().exec(processName);// procBuilder.start(); if(!procBuilder.redirectErrorStream()) { _errorWorker = new ProcessErrorWorker(_proc); _errorWorker.start(); } String proc_start_answer = _configuration.getNextCommand().getCommand(); System.out.println(“Waiting for process answer ‘”+proc_start_answer+”‘”); BufferedReader input = new BufferedReader(new InputStreamReader(_proc.getInputStream())); String answer = “”; try { System.out.println(“inputstream ready: “+input.ready()); […]