为子进程设置相对java-classpath

时间:2017-03-09 13:11:59

标签: python subprocess

我有2个安装:一个在我的笔记本电脑上,一个SLURM安装。我想在我的python函数中设置相对路径,所以我可以通过git并运行它。

问题:我的jar文件是在 我的笔记本电脑上的/Users/me/libs/jena/lib/*~/libs/jena/lib/*以及服务器上的/home/user/me/libs/jena/lib/*~/libs/jena/lib/*

我知道并尝试os.path.join(os.path.dirname(__file__),'../../libs/jena/lib/*'),也直接设置~/path/无效。

令我感到困惑的是运行带有os.path.join的shebang脚本可以正常工作,但设置类路径如下:

cmd = ["java", "-cp", os.path.join(os.path.dirname(__file__),'../../libs/jena/lib/*')"+":.", java_file, args]
proc = Popen(cmd, stdout=PIPE, stderr=PIPE)

不起作用。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

首先,您可以尝试删除路径中的*;它应该只是../../libs/jena/lib/

其次,您可以在笔记本电脑和群集上的CLASSPATH文件中将.bash_profile变量设置为正确的值。

export CLASSPATH=~/libs/jena/lib/

这样做是因为当~文件来源时(登录时),Bash会将.bash_profile替换为你的家。这在Python脚本中不起作用,因为Bash不参与(仅限Bash)将~理解为用户的主目录。)

使用环境变量还可以让您在笔记本电脑和群集上拥有不同的库路径。例如,如果您想尝试其中一个库的较新版本。