python - 为什么我的 python 返回值包含以前的打印文本?
问题描述
我创建了一个小的 python 脚本,我从另一个 shell 脚本调用它来计算文件中数据的平均值,并将这个平均值返回给 shell 脚本变量。这是我的代码:
import sys
def calc():
output = []
file_path = sys.argv[1]
with open(file_path, 'r') as input_stream:
line = next(input_stream, None)
while line is not None:
output.append(float(line.split("\t")[-1]))
#print(output)
line = next(input_stream, None)
line = next(input_stream, None)
avg = sum(output)/len(output)
print("Average of all weights = %f kg" % avg)
return print(avg)
calc()
但是,当我打印存储在 shell 变量中的值时
echo "$avgVal"
它还显示以前的打印文本!
所有重量的平均值 = 78.22 kg
78.22
为什么会这样?我在返回平均值的方式上是否犯了任何错误?我怎样才能在 shell 变量中只得到 78.22?
解决方案
shell 捕获打印到标准输出的任何内容。如果您不想将该消息打印到标准错误中,请将该消息打印到avgVal
.
print("Average of all weights = %f kg" % avg, file = sys.stderr)
推荐阅读
- node.js - “请求具有不受支持的文档格式” - AWS Textract,使用 NodeJS
- security - type=service-account 是否受 2021 年 9 月 13 日的安全更新影响?
- reactjs - 当 AppBar 和内容组件不在同一个组件中时,如何使用持久/永久抽屉组件?
- c# - 错误 cs0246 找不到类型或命名空间
- android - 应该恰好有一项具有 [DropdownButton] 的值:0。检测到 0 个或 2 个或多个具有相同值的 [DropdownMenuItem]
- emacs - Emacs:在“find-name-dired”结果缓冲区中进行正则表达式查询替换时,如何匹配换行符?
- azure-keyvault - 如何找出 Azure KeyVault AccessPolicy 更改
- r - 1970 年之前日期的 fasttime 返回 NA
- aframe - 如何在 A-Frame 中自动行走?
- r - 如何查找所有环境 (R) 中的内存使用情况?