[英]Windows REG command not working when executed from ProcessBuilder in Java
[英]Command executed from terminal, failed from Java using ProcessBuilder
我正在尝试在终端中执行命令。 问题是,当我在终端中执行命令时,它成功了,但是当我从java运行命令时,命令被执行但是,我收到一条错误消息,显示我缺少一些python模块。
try{
String[] list = { "python3", "script.py" };
ProcessBuilder pb = new ProcessBuilder(list);
pb.directory(
new File("/home/script"));
System.out.println("" + pb.directory());
Process process = pb.start();
InputStream str = process.getErrorStream();
InputStreamReader isr = new InputStreamReader(str);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:", Arrays.toString(args));
while ((line = br.readLine()) != null) {
System.out.println(line);}
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String ret = in.readLine();
System.out.println("value is : "+ret);
process.waitFor();
process.destroy();
}catch (Exception ex) {
ex.printStackTrace();
}
错误消息:
/home/script
Output of running [] is:Traceback (most recent call last):
File "scraper.py", line 8, in <module>
from selenium import webdriver
ModuleNotFoundError: No module named 'selenium'
value is : null
PS:当我直接从终端执行命令时,一切正常,我没有得到丢失的模块错误。
与Java类似,python允许导入其他东西。 该消息告诉您,您的python脚本想要使用模块selenium
,但无法找到它。
在shell /控制台中手动运行命令时,很可能会有一些特殊的ENV var设置。 因此,请检查.bashrc或.initrc或其他定义ENV变量的内容。 在unix系统上,键入命令env
也可能会显示所有设置。 只需检查是否设置了env var PYTHONPATH。
由于该调用是从命令行进行的,因此可以肯定,该模块已安装在您的系统上。 您唯一的问题是当您通过Java ProcessBuilder调用该脚本时,python无法找到它!
一种解决方案可能是您在脚本中“手动”调整PYTHONPATH。 因此:为PYTHONPATH设置正确的设置,然后将脚本更新为“做正确的事情”。
有关更多详细信息,请参阅python 文档 !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.