gpt4 book ai didi

python - bash 脚本中的间歇性语法错误涉及 echo、python 脚本、grep、sed、bc 和 date

转载 作者:行者123 更新时间:2023-12-01 04:29:34 25 4
gpt4 key购买 nike

我编写了一个 Python 脚本,用于从 Raspberry Pi Astro“Sense Hat”传感器进行磁场测量。它被称为“mag-AstroPi.py”:

#!/usr/bin/python
from sense_hat import SenseHat
sense = SenseHat()
raw = sense.get_compass_raw()
#print(x: {x}, y: {y}, z: {z}.format(**raw))
#alternatives
print(sense.compass_raw)

这是 Sense Hat 制造商 element14 提供的脚本。

该脚本以微特斯拉为单位输出三个轴(X、Y 和 Z)的磁场数据,以及一堆额外字符:

pi@raspberrypi ~ $ python mag-AstroPi.py

{'y': 13.895279884338379, 'x': -1.1642401218414307, 'z': -0.4132799804210663}

我需要删除多余的字符,将这些值乘以 1,000,以便将它们转换为纳特斯拉(我的特定应用程序的标准 SI 单位),然后将相乘的值与日期和时间一起记录到文件中。这需要每两秒发生一次。

我希望有三个独立的日志文件 - 一个用于 X 轴,一个用于 Y 轴,一个用于 Z 轴。不过,目前我只处理 Y 轴数据。一旦 Y 轴数据记录工作正常,我就可以复制和更改其他两个轴。

所以我编写了一个 bash 脚本 AstroPiMagLogger.sh,它在启动时通过 cron 作业运行:

#!/bin/bash
while true
do
echo $(python mag-AstroPi.py -n | grep "y" | cut -d " " -f2 | cut -c 1-18 | sed 's/$/*1000/' | bc; date +"%Y,%m,%d,%T,%Z") >> rawysecnT.txt
sleep 2
done

应该仅提取 Y 轴值,将其乘以 1,000,然后将其与当前日期、时间和时区一起保存到新的文本文件 rawysecnT.txt 中。

它可以工作,有点...这是 rawysecnT.txt 的内容:

13703.761100769043000 2015,09,14,08:56:41,UTC

13703.761100769043000 2015,09,14,08:56:44,UTC

13613.041877746582000 2015,09,14,08:56:46,UTC

13794.480323791504000 2015,09,14,08:56:49,UTC

13804.560661315918000 2015,09,14,08:56:52,UTC

13875.120162963867000 2015,09,14,08:56:55,UTC

13633.201599121094000 2015,09,14,08:56:58,UTC

2015,09,14,08:57:00,UTC

2015,09,14,08:57:03,UTC

13744.080543518066000 2015,09,14,08:57:06,UTC

14016.241073608398000 2015,09,14,08:57:09,UTC

如您所见,它在大多数情况下都有效。但有时,它不会将磁场测量结果记录到文件中;而是将磁场测量值记录到文件中。它只记录日期和时间。

今天早些时候,我的记录工作正常,但那是在我添加将磁数据乘以 1000 的代码之前(即今天早些时候,脚本仅记录以微特斯拉为单位的原始磁数据,以及日期/时间)。我有几个小时的这样的数据,没有任何错误,所以很明显我在添加磁性测量乘法代码时塞满了一些东西。

我决定直接在命令行中运行以下命令(而不是通过脚本),以便进行调试。

echo $(python mag-AstroPi.py -n |grep "y" | cut -d " " -f2 | cut -c 1-18 | sed 's/$/*1000/' | bc; date +"%Y,%m,%d,%T,%Z")

不出所料,这工作了大约十几次,并将以下输出打印到终端,这正是我想要的:

14167.440414428711000 2015,09,14,09:07:30,UTC

然后,最后一次,它返回了以下错误:

(standard_in) 1: syntax error

2015,09,14,09:07:59,UTC

鉴于该错误是间歇性的,而且我对编程相当陌生(我只接触了大约一个月),我不知道可能是什么问题。

如果有人能想到为什么这种方法在大部分时间但并非总是有效,我将不胜感激。

<小时/>

评论中要求的两个示例输出如下:

pi@raspberrypi ~ $ python mag-AstroPi.py -n | grep "y" | cut -d " " -f2 | cut -c 1-18 | sed 's/$/*1000/' | bc; date +"%Y,%m,%d,%T,%Z" 
14076.720237731934000 2015,09,14,09:53:33,UTC

pi@raspberrypi ~ $ python mag-AstroPi.py -n
{'y': 13.935601234436035, 'x': -1.506960153579712, 'z': 0.24192002415657043}

最佳答案

看起来您想要做的事情可以(并且几乎肯定应该)在 Python 脚本本身内完成。 get_compass_raw() 返回一个字典,因此您可以直接提取 y 值(并乘以 1000):

raw = sense.get_compass_raw()
y_component_nT = raw['y'] * 1000

要添加时间戳,我将使用内置的 datetime 模块:

from datetime import datetime
now = datetime.now()

然后,您可以使用 now.strftime(format) 将时间格式化为您想要的格式,其中 format 是按 the docs 所示构建的格式字符串。 .

我将把用 python 写入文件并暂停执行的挑战留给您 - 本网站和其他地方的许多好的答案已经涵盖了这些挑战。

关于python - bash 脚本中的间歇性语法错误涉及 echo、python 脚本、grep、sed、bc 和 date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32561203/

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