相关疑难解决方法(0)

除非换行符在格式字符串中,为什么printf在调用后不会刷新?

printf除非换行符在格式字符串中,为什么在调用后不刷新?这是POSIX的行为吗?我怎么可能printf每次都立即冲洗?

c printf flush

509
推荐指数
10
解决办法
33万
查看次数

无法从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());
    answer+=input.readLine(); 
    System.out.println("process answer:  "+answer);
    input.close();        

   } catch(Exception e) {
    System.out.print(e.getMessage());     
   } 
Run Code Online (Sandbox Code Playgroud)

java inputstream process

21
推荐指数
3
解决办法
4万
查看次数

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

我正在尝试创建一种控制台/终端,允许用户输入一个字符串,然后将其转换为一个进程并打印出结果.就像一个普通的控制台.但我无法管理输入/输出流.我已经研究过这个帖子,但是这个解决方案很遗憾不适用于我的问题.

与"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 inStream, inErrStream;
    OutputStream outStream;

    public Console(){
        super("Console");
        setPreferredSize(new Dimension(500, 600));
        setLocationByPlatform(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // GUI
        outPane = new JTextPane();
        outPane.setEditable(false);
        outPane.setBackground(new Color(20, 20, 20));
        outPane.setForeground(Color.white);
        inPane = new JTextPane(); …
Run Code Online (Sandbox Code Playgroud)

java inputstream outputstream process

7
推荐指数
1
解决办法
4407
查看次数

标签 统计

inputstream ×2

java ×2

process ×2

c ×1

flush ×1

outputstream ×1

printf ×1