我有一个大的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命令都是相同的,但路径可以改变。我最终会把路径变成可以输入的路径。现在我只想让它静态工作。
答案 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