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

2024-09-24 20:36:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我在从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有关。任何帮助都将不胜感激。你知道吗


Tags: run命令行参数mainargsgeneratorsystemexec
1条回答
网友
1楼 · 发布于 2024-09-24 20:36:32

经过一番修补,我注意到通过将所有参数放入一个列表中,并将它们转换为一个字符串

args = '\ '.join(argList) 

会处理Cygwin和

args = ' '.join(argList) 

可以在Linux上工作。 然而,我没有找到一个很好的独立于平台的方法来解决这个问题,而没有检测到正在使用的操作系统。相反,我找到了一个基于原始字符串的解决方案,它在Cygwin和Linux上都能很好地工作。你知道吗

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

相关问题 更多 >