簡體   English   中英

使用Java進程exec使用tee命令將telnet輸出管道到日志文件

[英]pipe telnet output to logfile with tee command using Java process exec

在一個簡單的MUD客戶端項目中 ,並發和流讀取被證明有些令人頭疼,因此我正在嘗試尋找替代方法。 tee命令看起來很適合同時在文件和終端之間拆分輸出。 然后如何通過telnet會話發送消息?

在控制台和文件之間分割遠程輸出:

thufir@dur:~/NetBeansProjects/TelnetConsole$ 
thufir@dur:~/NetBeansProjects/TelnetConsole$ telnet rainmaker.wunderground.com 3000 | tee out.txt
Trying 38.102.137.140...
Connected to rainmaker.wunderground.com.
Escape character is '^]'.
------------------------------------------------------------------------------
*               Welcome to THE WEATHER UNDERGROUND telnet service!            *

然后,我如何通過管道或以某種方式將Java消息發送到系統telnet客戶端? 或者,也許在Java內部使用exec並啟動telnet會話和tee更有意義嗎? 只是在尋找一種好的方法。

是的,因為您想同時控制輸入和輸出數據,所以exec聽起來是一個更好的解決方案。 當您使用exec時您真的需要開球嗎,我不明白為什么...

還要看看netcat而不是telnet-telnet具有一些特殊的字符處理功能,如果您打算發送二進制數據,可能會給您帶來麻煩。

絕不運行代碼,但絕對比使用Apache TelnetClient簡單。 但是,不可能將管道命令(?)與java exec一起使用:

package exec;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

class Ideone {

    public static void main(String[] args) throws IOException {
        new Ideone().start();
    }

    public void start() throws IOException {
        String[] s = new String[6];
        s[0] = "telnet";
        s[1] = "rainmaker.wunderground.com";
        s[2] = "3000";
        s[3] = "|";
        s[4] = "tee";
        s[5] = "out.log";
        for (int i=0;i<s.length;i++ ) {
            System.out.println(s[i]);
        }
        Process process = Runtime.getRuntime().exec(s);
        OutputStream stdin = process.getOutputStream();
        InputStream stderr = process.getErrorStream();
        InputStream stdout = process.getInputStream();
        read();
        write(stdout);
    }

    private void parseLog() {
        //read the log file, automate responses
    }

    private void write(InputStream stdin) throws UnsupportedEncodingException, IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(stdin, "UTF-8"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

    }

    private void read() {

        Thread read = new Thread() {

            String command = null;

            @Override
            public void run() {
                BufferedReader bufferedInput = new BufferedReader(new InputStreamReader(System.in));
                do {
                    try {
                        command = bufferedInput.readLine();
                    } catch (IOException ex) {
                        System.out.println(ex);
                    } finally {
                    }
                } while (true);
            }
        };
        read.start();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM