如何在Java中使用Python终端函数

时间:2014-08-30 00:29:56

标签: java python macos terminal

我有一个有趣的问题。我需要能够有一个允许用户输入命令的窗口,就像它们在终端中并使用python一样。当你输入' python'在mac上它允许你运行python命令。我可以访问' python'函数,但它不会让我通过自定义命令行界面将python命令写入终端。

确实

button.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            String text = textField.getText();
            try {

                Process p = Runtime.getRuntime().exec(text);

            //Nothing after this line
            } catch (IOException i) {
                // TODO Auto-generated catch block
                i.printStackTrace();
            }
        }
    });

正如您所看到的,每次单击按钮时都会运行一个事件侦听器。 当我输入' python'在我的命令行中,它不允许我输入子命令行,用于python命令。我有一种感觉是因为这条线:

Process p = Runtime.getRuntime().exec(text);

允许我使用我的python命令的任何建议?

感谢您阅读

1 个答案:

答案 0 :(得分:0)

您的进程存在阻止Swing事件线程的风险。为了防止这种情况发生,并且为了防止你为Process的OutputStream耗尽OS缓冲区,我建议,

  1. 在后台线程中运行您的流程。
  2. 将流侦听器附加到您的Process,包括使用Process的InputStream的InputStreamReader,Process的ErrorStream的InputStreamReader,以及将文本推送到Process的OutputStream。把它放到PrintStream中会很好用。
  3. 也可以在自己的线程中处理这个InputStream。
  4. 无关建议您考虑使用ProcessBuilder作为获取流程的更简洁方法。