Выполнение многострочного python скрипта через bash - PullRequest
0 голосов
/ 03 мая 2020

У меня есть сценарий python, который очищает матчи и статистику команд НХЛ, чтобы предсказать победителей. Выходные данные этого скрипта дают некоторые общие характеристики команд и предсказывают победителя в формате:

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 (возможно, используя crontab, но пока не получил) и пришлите мне по электронной почте результаты, используя smtp, этот скрипт оболочки выглядит следующим образом:

#!/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 (ie несколько строк)? Надеюсь, я смогу сделать это до начала сезона, любой совет будет полезен, спасибо!

Ответы [ 3 ]

0 голосов
/ 03 мая 2020

Добавить параметр -e после эха.

echo -e $messagebody | mail -s "$d NHLpredictions" ME@gmail.com

Если он не работает, проверьте, содержит ли ваша переменная символы \n.

0 голосов
/ 03 мая 2020

Вы должны заключить строки в ", чтобы они сохраняли свои новые строки.

#!/bin/bash

d=$(date +%Y-%m-%d)

messagebody="$(python3 nhlpredictions.py)"

echo "$messagebody" | mail -s "$d NHLpredictions" ME@gmail.com
0 голосов
/ 03 мая 2020

Короче говоря, оператор перенаправления >> добавит строки в конец указанного файла, где-как сингл больше, чем> очистит и перезапишет файл.

Отправляет стандартный вывод в файл 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
...