所以我有一个从终端/命令行运行得很好的Python文件。 Python文件使用使用pip导入的模块。我已经将我的crontab文件设置为每个工作日的下午1:15运行:
/var/mail/
我的问题是双重的。首先,python文件的输出被发送到/var/mail/
,而不是像从命令行正常运行时那样输出到终端屏幕。如何直接在终端中输出输出而不是附加到文件?其次,在ImportError
文件中,脚本的输出是 return $resource('/api/core/blablah', {}, {
getTranslated: {
method: 'GET',
isArray: true,
transformResponse: function (data) {
//do something here
return 'something';
}
}
}
});
,表示没有模块具有我要导入的模块的名称。直接从命令行运行脚本时不会发生这种情况,在这种情况下,脚本可以正常运行而不会出现错误。我怎么能绕过这个?
答案 0 :(得分:1)
不是故意的,但你的问题是单一的:你不理解Cron。
Cron是一种调度工具。这是告诉你的电脑“嘿,经常照顾这个,好吗?”这是一个自动化流程,在设置后不会与您进行交互。系统管理员最常使用它来处理移动日志或复制磁盘等任务 - 管理员不希望看到的内容。 Cron作业应输出到某个日志文件而不是控制台。 (当Cron 接收到stdout
的输出时,它会保存输出并通过系统指定的邮件代理将其邮寄给您。这涉及将数据存储在/var/mail/
为你发现了。)
这意味着您无法从Cron运行的作业输出到您的终端(没有对tty设备的某些操作,我将说这不是您想要的路线)。我不确定在什么情况下您可能希望每天下午1:15重复自动作业并将其输出重定向到您的终端。如果你关闭终端怎么办?工作在哪里发送输出?您需要实现日志记录。查看Python的logging模块。
至于ImportError
:Cron不在你的shell中运行。它不使用您的环境变量或$PATH
。那么这是什么意思?那么你的工作从python
开始。哪个python
? /usr/bin/python
? /usr/local/bin/python
? /usr/local/bin/python3
?使用哪种二进制文件取决于您的操作系统和设置,但无论如何,可以安全地说,当您的 Python具有模块时,默认 Python可执行文件不会。要解决这个问题,您应该使用绝对路径,例如将python
替换为/usr/bin/python
或其他。要找出您使用的Python,请在命令行上执行which python
,输出将告诉您。