gpt4 book ai didi

python - 与使用 Python/Gradle 转义字符相关的跨平台问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:25 24 4
gpt4 key购买 nike

我在从 Python 调用 Gradle JavaExec 任务时遇到跨平台问题。一个子项目有一个生成一些输出的应用程序,它接受命令行参数来执行此操作。

渐变任务:

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 下运行良好,但在 Ubuntu 16.04 LTS 下失败。错误信息是:

:generator:run
maxBound\ is not a recognized option

此错误消息是由生成器的命令行解析器生成的。问题显然是 Cygwin 转义空格所需的反斜杠会导致问题。删除转义符似乎无法解决 Linux 上的问题,我不确定它需要什么。

我正在使用 Python 3.5。

总而言之,我不确定这是否是 Linux 与 Windows 中的转义问题,是否是 Gradle 问题,或者是否与 Python 有关。任何帮助将不胜感激。

最佳答案

经过一些修补,我注意到通过将所有参数放在一个列表中并将它们变成一个字符串

args = '\ '.join(argList) 

可以在 Cygwin 上工作

args = ' '.join(argList) 

可以在 Linux 上运行。但是,在不检测正在使用哪个操作系统的情况下,我没有为这个解决方案找到一个很好的独立于平台的方法。相反,我找到了一种基于原始字符串的解决方案,该解决方案在 Cygwin 和 Linux 上都运行良好。

argRaw = r"-Dexec.args= --minBound {} --maxBound {}"
args = argRaw.format(min_bound, max_bound)

关于python - 与使用 Python/Gradle 转义字符相关的跨平台问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37393817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com