python:在命令中使用变量运行java命令

时间:2016-03-22 19:59:10

标签: java python bash

我有一个大的python脚本并解析数据,然后将其预先导入到另一个系统。我想从这个脚本中触发导入到其他系统。

要导入的bash脚本看起来像这样

@Override
public void onResume() {
    super.onResume();
    ((NameOfActivity) getActivity()).afterFragmentComplete();
}

在我的python脚本中,我想做这样的事情:

export DPATH="/home/user/"
export DCONF="/home/user/conf"
java -cp "$DPATH/*" -D.config.dir=$DCONF com.sa.uploader.process.ProcessRunner process.name=upsert

这样我可以简单地运行:

dpath = "/home/user/"
dconf = "/home/user/conf"
drun  = " -cp "+str(dpath)+" -D.config.dir="+str(dconf)+" com.sa.uploader.process.ProcessRunner process.name=upsert"

显然,最后一行的drun部分没有被认为是有效的运行方式。错误是

java = subprocess.call(['java', drun])

然后我测试一下:

Error: Could not find or load main class  -cp .home.user.....etc

哪个确实有效。所以我接着尝试了:

java = subprocess.call(['java', '-version'])

当然。

jtest = " -version"

java = subprocess.call(['java', jtest])

我确信这是一种方法。 原因是每次java命令都是相同的,但路径可以改变。我最终会把路径变成可以输入的路径。现在我只想让它静态工作。

2 个答案:

答案 0 :(得分:0)

您应该将命令行拆分为列表或使用shell,例如

subprocess.call(['java'] + drun.split())

subprocess.call('java' + drun, shell=True)

答案 1 :(得分:0)

您尝试运行的课程似乎不在dpath指定的路径中。在shell脚本中,您有:

java -cp "$DPATH/*"

注意正斜杠后面的星号。但是在你的python中你没有它,你可以将python改为:

dpath = "/home/user/*"

这将导致-cp扩展为该目录中所有jar个文件的列表。 您可以详细了解-cp选项here