gpt4 book ai didi

groovy - 为什么两次访问Groovy进程的getText()都会导致失败?

转载 作者:行者123 更新时间:2023-12-03 04:52:17 25 4
gpt4 key购买 nike

我正在用Gradle任务运行一些curl代码,我注意到如果我两次访问进程的文本,则第二次访问总是失败。我注意到通过将process.text传递给XlmSlurper()。如果我首先使用printlned process.text,那么它将在崩溃时崩溃;如果我不进行println,则崩溃将起作用。
这是一些说明这种行为的代码。首先是失败的任务版本:

    task hello {
println "****** HELLO ******"

def process = ['curl', '-X', 'POST', '-H', 'Accept: Application/xml', '-H', 'Content-Type: application/json', "http://itemid.sea.redacted.com/item_ids", '-d', '{"user":"Y2VxYnVpbGRhZ2VudDpCdTFsZCE=","request":"guid"}'].execute()
process.waitFor()

println "err.text"
println process.err.text

println "process.text 1 is:"
println process.text

println "process.text 2 is:"
println process.text
}

执行此命令后,输出为:
****** HELLO ******
err.text
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 141 0 85 100 56 2412 1589 --:--:-- --:--:-- --:--:-- 2428

process.text 1 is:
<?xml version="1.0" encoding="utf-8"?><long xmlns="http://redacted.com/">121144</long>
process.text 2 is:
Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.
java.lang.IllegalArgumentException: android.compileSdkVersion is missing!
at com.android.build.gradle.internal.SdkHandler.initTarget(SdkHandler.java:80)
at com.android.build.gradle.BasePlugin.ensureTargetSetup(BasePlugin.groovy:462)

但是,如果最后两行println行被注释掉,则说明成功:
    task hello {
println "****** HELLO ******"

def process = ['curl', '-X', 'POST', '-H', 'Accept: Application/xml', '-H', 'Content-Type: application/json', "http://itemid.sea.redacted.com/item_ids", '-d', '{"user":"Y2VxYnVpbGRhZ2VudDpCdTFsZCE=","request":"guid"}'].execute()
process.waitFor()

println "err.text"
println process.err.text

println "process.text 1 is:"
println process.text

// println "process.text 2 is:"
// println process.text
}

哪个有输出:
****** HELLO ******
err.text
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 141 0 85 100 56 1977 1303 --:--:-- --:--:-- --:--:-- 2023

process.text 1 is:
<?xml version="1.0" encoding="utf-8"?><long xmlns="http://redacted.com/">121145</long>
:help

Welcome to Gradle 2.2.1.

To run a build, run gradlew <task> ...

To see a list of available tasks, run gradlew tasks

To see a list of command-line options, run gradlew --help

BUILD SUCCESSFUL

为什么添加/删除这些最后的println会造成这种差异?

(为什么第二个版本的输出中还有:help ...?)

在两种情况下,我都是使用./gradlew从命令行运行的

如果使用getText()代替text /,则存在相同的问题

最佳答案

您返回的流只能读取一次。将其写到文件或变量中,然后根据需要从该文件/变量中读取多次。

关于groovy - 为什么两次访问Groovy进程的getText()都会导致失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209113/

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