当shell脚本运行python模块来生成文件和电子邮件时,附件为空

时间:2014-02-20 16:11:33

标签: python shell

我的shell脚本运行一个python任务管理器模块,最后创建一个.png文件。然后shell脚本通过电子邮件发送给我.png。如果我单独运行任务,它们就可以了,但是将它们组合在同一个.sh中会产生一个带有空附件的电子邮件。

python的尾部结束:

fig = plt.figure()
ax2 = fig.add_subplot(111)
ax2.scatter(goodRIDs.ASL75,goodRIDs.closet_count_per_slot, 
  color='green',alpha=0.2)
ax2.scatter(badRIDs.ASL75,badRIDs.closet_count_per_slot, 
  color='red',alpha=0.5)

plt.savefig('todaysASL'+str(pct)+'chart.png')

path = os.getcwd()
os.chdir(path+'/ASLgraphs')
plt.savefig(today+'ASL'+str(pct)+'vClosetperSlot.png')

shell脚本:

. venv/bin/activate


file=/home/todaysASL75chart.png
file1=/home/todaysASL95chart.png

python ~/WeeklyRIDTrendFinder.py 75 > $file
python ~/WeeklyRIDTrendFinder.py 95 > $file1


(echo "Today's ASL chart for the past week" ; uuencode $file ; uuencode $file1 )
 | mail -s "Weekly ASL Chart" -r "from@email.com" me@email.com

这是某种潮红问题吗?我尝试过做plt.flush(),但显然情节模块不像文件那样。

3 个答案:

答案 0 :(得分:0)

您是否可能需要在图表创建和电子邮件创建之间延迟?也许尝试2秒延迟,看看会发生什么。我以前看过,在脚本中解决问题,可能值得尝试。

答案 1 :(得分:0)

可能savefig未正确关闭文件(并依赖于垃圾收集器)。试试这个:

#...
f=open(today+'ASL'+str(pct)+'vClosetperSlot.png', 'wb')
plt.savefig(f)
f.close()
#...

答案 2 :(得分:0)

原来这是一个stdout与文件保存问题 - shell脚本接受任何python打印,并将其保存在file和file1。但是,Python正在保存文件而不打印任何内容,因此shell脚本不会收集任何内容并保存它。

将shell脚本更改为:

. venv/bin/activate


python ~/monica-repo/dev/bi/RIDqualifier/WeeklyRIDTrendFinder.py 75
python ~/monica-repo/dev/bi/RIDqualifier/WeeklyRIDTrendFinder.py 95


(echo "ASL chart with the past week of RIDs at 48hrs") | mailx -s "Weekly ASL Chart" -a todaysASL75chart.png -a todaysASL95chart.png  me@email.com

让它工作得很好