通过 bash 执行多行 python 脚本
Executing a multi-line python script via bash
我有一个 python 脚本,可以抓取 NHL 球队的比赛和统计数据来预测获胜者。该脚本的输出给出了一些球队比赛的一般统计数据并预测了获胜者,格式为:
MATCHUP: San Jose Sharks ---- Anaheim Ducks
PTS%: 0.45 ---- 0.472
CF%: 50.7 ---- 48.0
5v5 Goals For per Game: 1.743 ---- 1.817
5v5 Goals Against per Game: 2.286 ---- 2.07
Power Play %: 17.46 ---- 14.67
Penalty Kill %: 85.71 ---- 77.0
Save Percentage: 0.889 ---- 0.908
Pick: San Jose Sharks.
Confidence: 15.8%.
现在我还有一个 shell 脚本,我想用它来每天执行我的 python 脚本(可能使用 crontab 但还没有实现)并使用 smtp 将结果通过电子邮件发送给我,那个 shell 脚本看起来像这样:
#!/bin/bash
d=$(date +%Y-%m-%d)
messagebody=$(python3 nhlpredictions.py)
echo $messagebody | mail -s "$d NHLpredictions" ME@gmail.com
这有效,我收到了电子邮件,但输出格式为单行:
MATCHUP: San Jose Sharks ---- Anaheim Ducks PTS%: 0.45 ---- 0.472 CF%: 50.7 ---- 48.0 5v5 Goals For per Game: 1.743 ---- 1.817 5v5 Goals Against per Game: 2.286 ---- 2.07 Power Play %: 17.46 ---- 14.67 Penalty Kill %: 85.71 ---- 77.0 Save Percentage: 0.889 ---- 0.908 Pick: San Jose Sharks. Confidence: 15.8%.
我认为发生这种情况是因为我将 python 脚本的输出保存到 bash 中的单个变量。有什么办法可以使我收到的电子邮件的格式与 python 脚本输出的格式相同(即多行)?希望我能在赛季重新开始前完成这项工作,任何建议都会有所帮助,谢谢!
简而言之,>> 重定向运算符会将行追加到指定文件的末尾,其中 - 因为单个大于 > 将清空并覆盖文件。
将标准输出发送到文件
python3 nhlpredictions.py >> text.txt
然后你可以使用cat
连接文件并在标准输出上打印
#!/bin/bash
d=$(date +%Y-%m-%d)
python3 nhlpredictions.py >> text.txt
cat text.txt | mail -s "$d NHLpredictions" ME@gmail.com
回显后添加参数-e
echo -e $messagebody | mail -s "$d NHLpredictions" ME@gmail.com
如果它不起作用,请检查您的变量是否包含符号 \n
。
您应该用 "
将字符串括起来,以确保它们保留换行符。
#!/bin/bash
d=$(date +%Y-%m-%d)
messagebody="$(python3 nhlpredictions.py)"
echo "$messagebody" | mail -s "$d NHLpredictions" ME@gmail.com
我有一个 python 脚本,可以抓取 NHL 球队的比赛和统计数据来预测获胜者。该脚本的输出给出了一些球队比赛的一般统计数据并预测了获胜者,格式为:
MATCHUP: San Jose Sharks ---- Anaheim Ducks
PTS%: 0.45 ---- 0.472
CF%: 50.7 ---- 48.0
5v5 Goals For per Game: 1.743 ---- 1.817
5v5 Goals Against per Game: 2.286 ---- 2.07
Power Play %: 17.46 ---- 14.67
Penalty Kill %: 85.71 ---- 77.0
Save Percentage: 0.889 ---- 0.908
Pick: San Jose Sharks.
Confidence: 15.8%.
现在我还有一个 shell 脚本,我想用它来每天执行我的 python 脚本(可能使用 crontab 但还没有实现)并使用 smtp 将结果通过电子邮件发送给我,那个 shell 脚本看起来像这样:
#!/bin/bash
d=$(date +%Y-%m-%d)
messagebody=$(python3 nhlpredictions.py)
echo $messagebody | mail -s "$d NHLpredictions" ME@gmail.com
这有效,我收到了电子邮件,但输出格式为单行:
MATCHUP: San Jose Sharks ---- Anaheim Ducks PTS%: 0.45 ---- 0.472 CF%: 50.7 ---- 48.0 5v5 Goals For per Game: 1.743 ---- 1.817 5v5 Goals Against per Game: 2.286 ---- 2.07 Power Play %: 17.46 ---- 14.67 Penalty Kill %: 85.71 ---- 77.0 Save Percentage: 0.889 ---- 0.908 Pick: San Jose Sharks. Confidence: 15.8%.
我认为发生这种情况是因为我将 python 脚本的输出保存到 bash 中的单个变量。有什么办法可以使我收到的电子邮件的格式与 python 脚本输出的格式相同(即多行)?希望我能在赛季重新开始前完成这项工作,任何建议都会有所帮助,谢谢!
简而言之,>> 重定向运算符会将行追加到指定文件的末尾,其中 - 因为单个大于 > 将清空并覆盖文件。
将标准输出发送到文件
python3 nhlpredictions.py >> text.txt
然后你可以使用cat
连接文件并在标准输出上打印
#!/bin/bash
d=$(date +%Y-%m-%d)
python3 nhlpredictions.py >> text.txt
cat text.txt | mail -s "$d NHLpredictions" ME@gmail.com
回显后添加参数-e
echo -e $messagebody | mail -s "$d NHLpredictions" ME@gmail.com
如果它不起作用,请检查您的变量是否包含符号 \n
。
您应该用 "
将字符串括起来,以确保它们保留换行符。
#!/bin/bash
d=$(date +%Y-%m-%d)
messagebody="$(python3 nhlpredictions.py)"
echo "$messagebody" | mail -s "$d NHLpredictions" ME@gmail.com