【发布时间】:2014-09-22 18:42:54
【问题描述】:
我有一个 python 脚本,它打印一些字符串并在控制台中更新它的执行进度:
if __name__ == '__main__':
...
print 'Hello, world!'
while page <= pages:
...
done = float(page) / pages
sys.stdout.write('\r[{0:50s}] {1:.2f}%'.format('#' * int(done * 50), done * 100))
page += 1
print ''
当我从 python script.py 这样的控制台运行它时,一切正常,我可以看到输出和进度条。我需要将此脚本作为 Gradle 构建的一部分运行,因此我创建了一个任务:
task process(type: Exec) {
workingDir file('src/main/python')
commandLine 'python', 'process.py', ...
}
现在,当我使用gradle process 执行脚本时,我在控制台中看不到任何输出,打印的最后一行是> Building 0% > :process
我也尝试过使用 Java 7 的 ProcessBuilder,但也没有成功:
task process << {
def processBuilder = new ProcessBuilder([
'python',
'process.py',
...
]).directory(file('src/main/python'))
.redirectInput(ProcessBuilder.Redirect.INHERIT)
.redirectOutput(ProcessBuilder.Redirect.INHERIT)
.redirectError(ProcessBuilder.Redirect.INHERIT).start().waitFor()
}
我被困住了。我真的很想在同一个控制台中看到 python 的输出。我怎样才能实现它?
UPD:有时它会以某种方式打印乱码:
【问题讨论】:
标签: python process gradle stdout build.gradle