【问题标题】:I can't run a python script from java and I think it's because the script does not have execute permissions我无法从 java 运行 python 脚本,我认为这是因为脚本没有执行权限
【发布时间】:2019-04-09 22:38:46
【问题描述】:

每当按下我的 gui (swing) 上的按钮时,我都会尝试运行 python 脚本。但是,该脚本永远不会运行,我不知道如何解决这个问题。我知道脚本可以独立运行,它应该是 py 而不是 python,因为 windows 和我的文件系统 ntfs。

到目前为止,我一直在尝试使用可以总结如下的代码:

myBtn.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        try {
          Process p = Runtime.getRuntime().exec("py myScript.py");

        } catch (IOException ioe) {
          ioe.printStackTrace();
        }
      }
});

我不认为我可以 chmod ntfs 的东西,但我尝试通过右键单击 python 文件来设置权限并试图弄乱安全设置。用户对脚本的完全控制没有任何作用。

python 脚本有以下权限,我猜是我的代码不工作,因为它没有执行权限。

-rw-r--r--

【问题讨论】:

  • 你能在执行的脚本周围打印堆栈跟踪吗? python脚本是否在同一目录下?
  • “脚本”本身不需要是可执行的,因为 Python 会自行加载并执行它。我个人不会使用Runtime.exec,而是使用ProcessBuilder,它更具可配置性。您还应该确保您正在使用输出和错误流for example。您可能还会发现 this example 很有帮助
  • myScript.py 是相对的。也许调用另一个exec 变体将工作目录作为参数提供给它。
  • 您可能需要再次调整工作目录,ProcessBuilder 进行救援。你也可以find this other example 有帮助
  • 也许你应该看看这个过程的标准输出/错误,最终也提供一个标准输入......也试试py本身是否被调用(用一个非常简单的脚本,例如将实际时间写入文件)((在 EDT 上进行长时间处理通常不是一个好主意))

标签: java python ntfs


【解决方案1】:

使用完整的 python 可执行路径而不是“py”。它仅以读取权限执行文件。

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Sample {

    public static void main(String[] args) throws Exception {
        try {
            Process p = Runtime.getRuntime().exec("C:/Windows/py myScript.py");
            String cmdOutput = null;
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
            // read the output from the command
            while ((cmdOutput = stdInput.readLine()) != null) {
                System.out.println(cmdOutput);
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

myScript.py

print("This line will be printed.")

输出:

C:\Users\Administrator\Documents\demo>javac Sample.java

C:\Users\Administrator\Documents\demo>java Sample
This line will be printed.

【讨论】:

  • 显然我的 python 脚本有问题。不管这个答案确实有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 2020-09-14
  • 2019-10-26
  • 2017-04-15
  • 1970-01-01
  • 2021-01-16
相关资源
最近更新 更多