【发布时间】:2018-05-28 02:43:00
【问题描述】:
我有一个基础 python 项目,它可以接受其他 python 文件并将它们作为子进程执行。基础项目接受用户输入,将其提供给子流程,然后子流程执行代码并通过标准输出返回一个值,该值反馈给用户。
在基础程序中,我正在做类似的事情:
dataReturnValue = subprocess.check_output(['python', pythonScriptPath, json.dumps(inputParams)])
然后在子流程中我有这样的东西:
inputParams = sys.argv[1]
...
...
sys.stdout.write(returnValue)
数据已正确返回,但我想做的是将返回的数据限制为returnValue。现在它返回整个子流程中的所有打印语句以及返回值。这对我来说很有意义,因为它是一种输出形式,而 print 类似于 stdout 包装器,但我想更好地控制它。
有没有办法在我的最终输出语句之前清除标准输出缓冲区,以便子进程返回的值中不包含杂散打印或输出?
编辑:我尝试在最后一次调用之前执行 sys.stdout.buffer.flush()、sys.stdout.flush(),希望它能清除缓冲区,但之前的打印语句仍然出现与最终返回值一起发送。
【问题讨论】:
-
如果是 python 脚本,也许使用
subprocess不是最好的方法。如果您致力于这种方法,也许可以考虑打印一个作为分隔符的标记值。例如print('SENTINEL',end=''),然后执行value = dataReturnValue.split('SENTINEL')[-1]——但实际上,理想情况下您只想导入脚本并调用函数。
标签: python subprocess buffer stdout