我遇到了从 Gradle 任务运行 Python 脚本的问题。
简洁版本
为什么执行 Python 脚本的 Gradle 任务(Python 脚本生成一个进程)似乎会阻塞?
长版
背景资料
我创建了三个 Python 脚本。
- start.py:生成两个进程,脚本退出时不会终止
- stop.py:杀死两个产生的进程
- test.py:做一个
print("Done")
(这个脚本用于调试目的。)
从我的终端/控制台本地运行所有三个 Python 脚本会执行预期的行为。
我有一个针对每个 Python 脚本的 Gradle 任务,该任务调用 Python 脚本。我的 build.gradle 看起来像这样:
task start (type:Exec) {
workingDir './mysie'
commandLine 'python', 'start.py'
}
task stop(type:Exec) {
workingDir './mydir'
commandLine 'python', 'stop.py'
}
task testPython(type:Exec) {
workingDir './mydir'
commandLine 'python', 'test.py'
}
我试图解决的问题
我正在使用 Gradle 包装器可执行文件,如果我执行gradlew testPython
,则任务运行并收到一条BUILD SUCCESSFUL
消息。
$ /gradlew test
Parallel execution is an incubating feature.
:testPython
Done
BUILD SUCCESSFUL
Total time: 0.888 secs
所以这表明gradlew
可以成功执行 Python 脚本而不会阻塞。但是,当我执行时gradlew start
,会产生两个进程。重要的是不要让 Python 脚本生成两个进程,但不会终止它们。Gradle 任务永远不会完成。它似乎被阻止了。这是我看到的输出:
$ gradlew start
Parallel execution is an incubating feature.
:start
<Insert Python "print" statement that have been flushed here>
> Building 0% > :start
我可以看到在我的主机上启动的进程。此外,在start.py
存在之前, Iprint("Exiting...")
显示在控制台上。所以我知道 Python 脚本已执行并完成。
在另一个终端中,我执行gradle stop
,它成功终止了进程。
这是奇怪的部分。gradle stop
命令成功完成后gradle start
,之前被阻塞的 ,突然完成。
我的问题
我需要在单独的任务中使用start
and 。stop
所以我的问题是:
- 我的 build.gradle 文件中的内容看起来是否正确?
- 为什么 Gradle 在执行生成进程的 Python 脚本时会阻塞?
gradle start
在 Python 脚本生成进程后,如何“解除阻止”任务?