经过大量的试验和错误,并且在网上获得了许多很多stackoverflow.com文章和其他教程,并且在Perl脚本的帮助下,我发现它执行了类似的操作,因此我能够弄清楚要使此方法起作用需要做些什么。 。
以下是确保正确设置所有步骤的步骤:
确保在.profile或.bash_profile中的PYTHONPATH此处,以及更多信息。请在此处)中具有所需的变量,以用于要在其中测试脚本的任何shell,以确保其有效。
编辑您的crontab,以在cron作业中包含运行脚本所需的目录
一)一定要包括在PATH变量(。)作为解释的根目录在这里。基本上,如果您使用命令运行可执行文件,则它必须能够找到存储可执行文件的根目录或目录,以及以下可能的目录:(/ sbin:/ bin:/ usr / sbin:/ usr / bin)。
a)如下所示:
* * * * cd /Users/user/Documents/foo; bar -l doSomething -v
第一种方法如下所示:
... #some script calls
my_env = os.environ.copy()
my_env["PYTHONPATH"] = "{}:{}".format(os.environ["PATH"] ,"<path you want to include>")
os.chdir("<path/to/desired/directory>")
subprocess.Popen(<call_as_string>, env=my_env, shell=True)
第二个看起来像这样:
... #some script calls
os.environ["PYTHONPATH"] = "{}:{}".format(os.environ["PATH"] ,"<path you want to include>")
os.chdir("<path/to/desired/directory>")
subprocess.Popen(<call_as_list_of_arguments)
由于可执行文件所需的路径包含在它被称为从壳佣工目录,这是必要的环境变量传递给可执行文件解释[这里。不过,我发现,在环境中修改PATH变量不适用于cron作业,而设置PYTHONPATH则可以。我在这里读到,shell使用PATH变量仅查找可执行文件,因此对于cronjob中的新shell,您需要将其传递给PYTHONPATH来寻找新的python模块。(这在Python文档中也有解释。)