我正在尝试在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
。
如果我独立运行javac命令,它执行正常..
我目前的工作指导是C:\Users\MyUsername
。
答案 0 :(得分:1)
尝试
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'})
使用javac
字典中正常运行env
时与java相关的环境变量。 asgs建议你需要CLASSPATH
。
您不必将命令拆分为我刚才这样做的列表,以便更容易看到整个事情。
答案 1 :(得分:1)
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'})
答案 2 :(得分:0)
请注意,您必须转义字符串中的反斜杠(\
)。您的示例很好,但是如果您的用户名实际上不是MyUsername但可能是“nerd”或任何其他形成有效转义序列的字符串,则命令将失败。
还要确保文件名中没有空格(或者使用其他示例中的拆分语法)。
所以你可能想要这样做:
output_process = subprocess.Popen(["javac", "-cp",
"C:\\Users\\MyUsername\\Desktop\\htmlcleaner-2.2.jar", "Scrapping_lastfm.java"],
shell=True, stdout=subprocess.PIPE)