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

python:使用命令中的变量运行java命令,java,python,bash,Java,Python,Bash,我有一个大型python脚本,解析数据,然后准备导入另一个系统。我也想从这个脚本触发导入到另一个系统 要导入的bash脚本如下所示 export DPATH="/home/user/" export DCONF="/home/user/conf" java -cp "$DPATH/*" -D.config.dir=$DCONF com.sa.uploader.process.ProcessRunner process.name=upsert 在我的python脚本中,我希望执行以下操作: dp

我有一个大型python脚本,解析数据,然后准备导入另一个系统。我也想从这个脚本触发导入到另一个系统

要导入的bash脚本如下所示

export DPATH="/home/user/"
export DCONF="/home/user/conf"
java -cp "$DPATH/*" -D.config.dir=$DCONF com.sa.uploader.process.ProcessRunner process.name=upsert
在我的python脚本中,我希望执行以下操作:

dpath = "/home/user/"
dconf = "/home/user/conf"
drun  = " -cp "+str(dpath)+" -D.config.dir="+str(dconf)+" com.sa.uploader.process.ProcessRunner process.name=upsert"
这样我就可以简单地运行以下程序:

java = subprocess.call(['java', drun])
显然,最后一行的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])
当然了

Error: Could not find or load main class  -version
我相信有办法做到这一点。
原因是java命令每次都是相同的,但是路径可以更改。我最终会将varabiales args的路径设置为它们可以作为输入。现在我只想让它静态工作

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

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


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

java -cp "$DPATH/*"
请注意正斜杠后面的星号。但在您的python中,您没有它,您可以将python更改为:

dpath = "/home/user/*"
这将导致
-cp
展开为该目录中所有
jar
文件的列表。
您可以阅读有关java版本命令的
-cp
选项的更多信息,只需删除空格即可。。它应该是subprocess.call(['java','-version'])。同样,对上述命令进行编辑。
subprocess.call['java',-version])
可能如何工作?你的意思是
subprocess.call['java','-version'])
?是的,我的意思是subprocess.call['java','-version'])-工作问题是,当我将-version放入一个名为jtest的变量中时,我希望能够使用该变量,而不是“-version”即(jtest),谢谢你指出这一点。这可能是我下一步的一个问题。谢谢。对于这个问题,我尝试用java版本测试来简化它,这样就去掉了所有其他变量,如果我只想在脚本中运行这个:java-version,但不必键入-version,我想现在将-version放入一个名为jtest的变量中,我如何使用变量jtest运行java,并且仍然得到java-version在写出时的结果谢谢!这就成功了。java=subprocess.call(['java'+jtest],shell=True)看起来+就是我要找的。shell=True的作用是什么?我也会用谷歌搜索,但如果答案很简单的话。再次感谢!subprocess.call()将参数列表按原样传递给操作系统exec(),该操作系统需要字符串数组。shell=True—顾名思义—在调用exec()之前将命令包装在shell中。看见
dpath = "/home/user/*"