有时候我们想要通过java调用一个python文件,而这个python文件又必须在特定的virtualenv虚拟环境下才能运行。如果直接将这个python文件所需要的包安装到python系统环境下难免有些暴力,我想到了如下方法解决这个问题:
创建虚拟环境后,如果虚拟环境的文件夹叫做env,我们平时激活虚拟环境的命令是 source env/bin/activate 。在bin目录中还有一个文件叫做activate_this.py,我们通过这个文件切换到虚拟环境,在一个python文件(假设叫a.py)中调用该文件(activate_this.py),再书写想要调用的目标python文件,再由Java调用a.py即可完成指定虚拟环境下的python文件调用。
python文件名为a.py,代码如下
import os
activate_this = 'path/to/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
os.system("python target.py")
java代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) {
try {
System.out.println("start");
Process pr = Runtime.getRuntime().exec("python /home/kui/桌面/