小编mwa*_*ing的帖子

通过PsExec时程序输出丢失

(这是我的同事在其他地方发布的一个问题,但我想我会在这里发布,看看我是否能够吸引不同的观众.)

大家好,我正在测试编写一个小型Java应用程序的可能性,它将使用Psexec启动远程作业.在测试将java程序的stdin和stdout绑定到psexec的过程中,我遇到了一个奇怪的错误.

我的测试程序是一个基本的echo程序.它启动一个线程从stdin读取,然后将读取输出直接传递回stdout.当在本地机器上运行时,而不是从psexec运行时,它运行得很漂亮.正是应该的.

但是,当我从PsExec调用它时,第一次将输入直接传送到stdout时它会丢失.是什么让这个错误真的很棒,它只是第一次将输入直接输入stdout而丢失了.如果输入String附加到另一个字符串,它可以正常工作.String字符串或String变量.但是,如果输入String直接发送到stdout,则它不会通过.它第二次发送到stdout它经历了很好的 - 每次都在那之后.

我完全不知道这里发生了什么.我试图测试我能想到的每一个可能的错误.我没有想法.我错过了一个或者这只是psexec里面的东西吗?

这是有问题的代码,它有三个类(其中一个实现了一个单一函数interace的接口).

主类:

public class Main {
    public static void main(String[] args) {
        System.out.println("Starting up.");

        CReader input = new CReader(new BufferedReader(
            new InputStreamReader(System.in)));
        CEcho echo = new CEcho();

        input.addInputStreamListener(echo);
        input.start();

        System.out.println("Successfully started up.  Awaiting input.");
    }
}
Run Code Online (Sandbox Code Playgroud)

CReader类,它是从stdin读取的线程:

public class CReader extends Thread {
    private ArrayList<InputStreamListener> listeners = 
        new ArrayList<InputStreamListener>();
    private boolean exit = false;
    private Reader in;

    public CReader(Reader in) {
        this.in = in;
    }

    public void addInputStreamListener(InputStreamListener listener) {
        listeners.add(listener); …
Run Code Online (Sandbox Code Playgroud)

java psexec

14
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

psexec ×1