经过大量的试验和错误,并且在网上获得了许多很多stackoverflow.com文章和其他教程,并且在Perl脚本的帮助下,我发现它执行了类似的操作,因此我能够弄清楚要使此方法起作用需要做些什么。
。
以下是确保正确设置所有步骤的步骤:
确保在.profile或.bash_profile中的PYTHONPATH(在此处和此处,以及更多信息。请在此处)中具有所需的变量,以用于要在其中测试脚本的任何shell,以确保其有效。
编辑您的crontab,以在cron作业中包含运行脚本所需的目录(在此处和此处)。
一)一定要包括在PATH变量(。)作为解释的根目录在这里。基本上,如果您使用命令运行可执行文件,则它必须能够找到存储可执行文件的根目录或目录,以及以下可能的目录:(/ sbin:/ bin:/
usr / sbin:/ usr / bin)。
- 在您的crontab文件中,创建一个cronjob,它将当前目录更改为您之前成功运行脚本的目录(例如/ Users / user / documents / foo)。
a)如下所示:
* * * * cd /Users/user/documents/foo; bar -l doSomething -v
- 由于我的问题专门针对调用可执行文件,因此有必要注意,有多种编写Python脚本来运行的方法(尽管在发现过程中,我了解到这适用于使用cron中的子进程进行的任何调用)。
第一种方法如下所示:
... #some script callsmy_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 callsos.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文档中也有解释。)
问题中引用的子流程文档中说明了两种不同方法之间的差异,但是可以在此处找到有关此模块的很好的教程。



