PythonからGradle JavaExecタスクを呼び出す際にクロスプラットフォームの問題が発生しています。 1つのサブプロジェクトには出力を生成するためのアプリケーションがあり、コマンドライン引数を受け入れます。Python/Gradleでエスケープ文字に関連するクロスプラットフォームの問題
のGradleのタスク:コマンドラインで
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と関係があるかどうかはわかりません。どんな助けでも大歓迎です。