我已经阅读了多篇文章和许多文章,详细介绍了cron作业中的脚本需要保留由于cron中shell的打开而在脚本本身内部运行所需的环境变量。我的情况是独特的,因为我的路径变量都是按照所讨论的那样设置的,这反过来将使用subprocess.call
()成功调用pysaunter
python egg ,但是它似乎从那里分解了。这导致整个过程中断了cron作业。
为了清楚起见,以下是我引用的步骤:
1) cronjob calls run_test.py -n foo
2) run_test.py sets the environment variables correctly
(cur_shell_path=sys.path (converted to proper path string, not shown here)
my_env= os.environ.copy()
my_env["PATH"] = my_env["PATH"] + cur_shell_path)
3) run_test.py calls subprocess.call("pysaunter -m foo -v", env=my_env, shell=True)
步骤3的输出表明,它正在查找鸡蛋,并已成功开始从pysaunter加载必需的模块,但是,当尝试查找用于修改pysaunter的目录时,它将中断。该错误显示为:
ImportError: no module named helpers
我曾多次尝试将此路径添加到环境中,但似乎从未找到包含helpers.py的目录。pysaunter -m foo -v
从交互式shell调用该命令时,该命令正常工作。
我在pysaunter上找不到太多帮助,因此我认为这里不需要过多的pysaunter细节。但是,如果您了解有关pysaunter的更多信息,请告诉我是否需要更多信息。我不确定分享什么。
我还阅读了许多文章,讨论了通过编辑.profile /
.bash_profile来更改Shell默认行为的功能。我试图找到一个位置,使我的路径变量可以全局访问,但是我什么也找不到。我不确定如何完成此操作,这可能会解决我的问题,因此,如果您对此有所了解,请告诉我。
最后说明,它在Mac 10.7.5上运行。
经过大量的试验和错误,并且在网上获得了许多很多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文档中也有解释。)
问题中引用的子流程文档中说明了两种不同方法之间的差异,但是可以在此处找到有关此模块的很好的教程。
我试图在raspberry pi 4打开时自动运行python脚本,并使用crontab来实现。该脚本是一个GUI,可帮助填充和搜索数据库。raspberry pi没有给出任何错误或异常,它只是正常打开,没有给出运行脚本的信号。我在crontab中使用的命令是: 脚本使用的库是: tkinter 感谢您的时间,这是我第一次在raspberry pi或linux环境中工作,所以我不太了解它。
问题内容: 我有一个在Linux上运行的Python(3)脚本,称为主脚本,该脚本必须从专有DLL调用例程。到目前为止,我已经使用Wine使用以下结构解决了这个问题: 脚本 dll_call.py 由Wine下安装的Windows Python(3)解释器执行。它将返回值转储到一个文件中,然后由等待的主脚本拾取该文件。如果我必须连续执行几次,它不是完全可靠且令人痛苦的缓慢。 我想一次启动脚本 dl
问题内容: 我正在尝试使用Linux crontab执行python脚本。我想每10分钟运行一次此脚本。 我找到了很多解决方案,但都无济于事。例如:在/etc/cron.d中编辑anacron或使用。我将此行放在文件的末尾,但它没有任何改变。我需要重启任何服务吗? 我必须编辑哪个文件来配置它? 提前致谢 这是脚本。 问题答案: 只需使用并按照此处的教程操作即可。 请参阅第3点,以获取有关如何指定频
问题内容: 我的python脚本未在crontab下运行。 我将其放在顶部的python脚本中: 我尝试这样做: 添加到我的: 我的/ var / log / cron文件说: 但是我的脚本没有运行,因为当我检查sql数据库时,什么都没有改变。如果我像这样直接在终端中运行它: 我得到正确的结果。 这是: 每条评论:是的,存在。我也可以使用just直接运行python脚本。作品。所以我不相信这是原因
我一直在尝试在Rpi启动时启动python脚本,但迄今为止我所尝试的一切都没有成功。 脚本是以下内容的某个版本:https://www.raspberrypi.org/learning/temperature-log/worksheet/: 它本身工作得很好。我试着编辑crontab,有无Python的绝对路径,以及编辑/etc/rc。地方的 我知道它不起作用,因为它应该创建一个文本文件并每分钟编
问题内容: 我有一个Python脚本,通过下一行通过selenium调用chrome。 python脚本是从shell脚本调用的。 当我从终端运行脚本或仅执行.sh文件时,它可以正常运行,但是当我计划crontab作业时,它将失败并显示下一个错误。 该错误与该问题的第一行代码有关。有人知道为什么会这样吗? 问题答案: 尝试从中启动浏览器最明显的问题是,即使您的计算机上运行了X,也未为从您的运行中的