Я не могу запустить скрипт Python из Java, и я думаю, что это потому, что скрипт не имеет разрешения на выполнение - PullRequest
2 голосов
/ 10 апреля 2019

Я пытаюсь запустить скрипт 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--

1 Ответ

0 голосов
/ 10 апреля 2019

Используйте полный путь к исполняемому файлу 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.
...