Я пытаюсь выполнить команду внутри скрипта Python:
import subprocess
output_process =
subprocess.Popen("javac -cp C:\Users\MyUsername\Desktop\htmlcleaner-2.2.jar Scrapping_lastfm.java",
shell=True, stdout=subprocess.PIPE)
Но я получаю package org.htmlcleaner does not exist
ошибок package org.htmlcleaner does not exist
.
Если я запускаю команду javac независимо, она выполняется отлично.
Моя текущая рабочая директива - C:\Users\MyUsername
.
Ошибка не вызвана python, а подпроцессом java. Скорее всего, java-машина не находит некоторые библиотеки и устраняет проблему с проблемой конфигурации PATH, скорее всего, переменная CLASSPATH не была установлена в среде. решать:
import shlex
JAVA_COMMAND=r"javac -cp C:\\Users\\MyUsername\\Desktop\\htmlcleaner-2.2.jar Scrapping_lastfm.java"
cmdline = shlex.split(JAVA_COMMAND)
output_process = subprocess.Popen(cmdline,shell=True, stdout=subprocess.PIPE, env={'CLASSPATH':'/path/to/java/packages'})
env={'CLASSPATH':'C:\\jdk1.6.0_23\\bin'}
но теперь я получаю сообщение об ошибке, javac not recognized as internal program
...
Пытаться
output_process = subprocess.Popen(["javac", "-cp",
"C:\Users\MyUsername\Desktop\htmlcleaner-2.2.jar", "Scrapping_lastfm.java"],
shell=True, stdout=subprocess.PIPE, env={'ENVIRONMENTAL': '/variables/here'})
с любыми относящимися к Java переменными окружающей среды, которые у вас есть, когда вы запускаете javac
обычно как элементы в словаре env
. asgs предлагает вам CLASSPATH
.
Вам не нужно разделить команду на список, который я только что сделал, чтобы было легче увидеть все это.
CLASSPATH
.
Имейте в виду, что вам нужно избежать обратной косой черты (\
) в строке. Ваш пример в порядке, однако, если ваше имя пользователя не является фактически MyUsername, но, возможно, "nerd" или любой другой строкой, образующей правильную escape-последовательность, команда не будет выполнена. Также убедитесь, что у вас нет пробелов в имени файла (или используйте синтаксис разделения в другом примере).
Таким образом, вы можете захотеть сделать:
output_process = subprocess.Popen(["javac", "-cp",
"C:\\Users\\MyUsername\\Desktop\\htmlcleaner-2.2.jar", "Scrapping_lastfm.java"],
shell=True, stdout=subprocess.PIPE)
env
дляPopen
с ключомPATH
установленным на путь ваших пакетов Java.