【问题标题】:Python script generates all image files when run manually but not when run as a cronjobPython 脚本在手动运行时生成所有图像文件,但在作为 cronjob 运行时不生成
【发布时间】:2020-05-27 12:38:32
【问题描述】:

我有一个 Python3 脚本,它使用 matplotlib 生成 png 图。当我在我的服务器上手动运行它时,所有的图都会更新,但是当我将它作为 cronjob 运行时,只有 9 个中的 3 个被正确更新。我对所有内容都使用绝对路径,并且文件权限/所有权都是相同的。

令人费解的是,cronjob 只更新了一些数字,而没有更新其他数字,而手动运行时,它们都被更新了。此外,更新的三个图形是在脚本末尾创建的。

编辑:添加了一些示例代码

当作为 cronjob 运行时,这不会更新我的身材:

grouped = daily_data.groupby('Province_State')

grouped.apply(lambda d: plt.plot(d.date, d.Incident_Rate, label=d.Province_State.iloc[0]))
plt.savefig('incidence_rate.png')
plt.close()

但这确实:

plt.plot(daily_data.loc[daily_data.Province_State=='Utah', 'date'],
         daily_data.loc[daily_data.Province_State=='Utah', 'incidence_change'],
         'C1', label="Daily")
plt.plot(daily_data.loc[daily_data.Province_State=='Utah', 'date'],
         daily_data.loc[daily_data.Province_State=='Utah', 'rolling_incidence_change_5_day'],
         'C1--', label='5 day MA')
plt.plot(daily_data.loc[daily_data.Province_State=='Utah', 'date'],
         daily_data.loc[daily_data.Province_State=='Utah', 'rolling_incidence_change_10_day'],
         'C1-.', label='10 day MA')
plt.plot(daily_data.loc[daily_data.Province_State=='Utah', 'date'],
         daily_data.loc[daily_data.Province_State=='Utah', 'rolling_incidence_change_15_day'],
         color='C1', linestyle='dotted', label='15 day MA')
plt.savefig(base_directory+'rolling_incidence_change.png')
plt.close()

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    也许您可以通过将输出和 stderr 发送到文件并比较手动运行的输出文件和 cron 输出文件来调试它

    yourscript > /tmp/out.txt 2>&1
    

    【讨论】:

    • 手动运行时,它不会产生任何输出,而当我添加 > /tmp/out.txt 2>&1 时,它会创建一个大小为 0 的文件。
    • 是的,现在您可以策略性地添加一些调试语句来显示正在发生的事情。您的目标是发现手动运行和 cron 运行之间的区别。所以找出他们开始表现不同的地方。
    • 我在各个阶段添加了打印语句,手动运行它的输出和作为 cronjob 的输出是相同的。不确定是否有任何方法可以强制matplotlib 提供更多信息。
    • @ruud 如果您编辑问题,您不应该change the meaning of the code。我暂时批准了它并重新编辑了问题。如果您编辑了问题,则问题没有意义,因此无法回答。
    • 啊,我明白了:这是另一个问题。你说的对。以后我会好好照顾的。代码中添加了图像,我打算用文本替换它。
    【解决方案2】:

    啊!发布了代码后,我现在确切地看到了问题所在。我没有为失败的数字提供路径......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 2011-01-05
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-02
      相关资源
      最近更新 更多