我在从Python调用gradlejavaexec任务时遇到了跨平台问题。一个子项目有一个应用程序来生成一些输出,它接受命令行参数。你知道吗
梯度任务:
task run(type: JavaExec) {
main = 'generator.myGenerator'
classpath = sourceSets.main.runtimeClasspath
if (System.getProperty("exec.args") != null) {
args System.getProperty("exec.args").split()
}
}
在命令行上,通过键入以下命令来运行:
./gradlew run -Dexec.args="--minBound 5 --maxBound 8"
另一个子项目希望运行此生成器并进入相应的目录,并进行子流程调用,传递相关参数:
Python代码:
args = ('-Dexec.args=\"--minBound\ ' + str(min_bound) +
'\ --maxBound\ ' + str(max_bound) + '\"')
subprocess.check_call(['./gradlew', 'run', args])
这在Cygwin下运行良好,但在ubuntu16.04 LTS下失败。 错误消息是:
:generator:run
maxBound\ is not a recognized option
此错误消息由生成器的命令行解析器生成。问题很明显,Cygwin需要的反斜杠来逃离空格,这会导致问题。删除转义似乎并不能解决Linux上的问题,我也不确定它需要什么。你知道吗
我使用的是python3.5。你知道吗
总而言之,我不确定这是Linux和Windows中的越狱问题,是Gradle问题,还是与Python有关。任何帮助都将不胜感激。你知道吗
经过一番修补,我注意到通过将所有参数放入一个列表中,并将它们转换为一个字符串
会处理Cygwin和
可以在Linux上工作。 然而,我没有找到一个很好的独立于平台的方法来解决这个问题,而没有检测到正在使用的操作系统。相反,我找到了一个基于原始字符串的解决方案,它在Cygwin和Linux上都能很好地工作。你知道吗
相关问题 更多 >
编程相关推荐