当前位置: 首页 > 面试题库 >

Python脚本未在调用pysaunter的crontab中运行

刘弘新
2023-03-14
问题内容

我已经阅读了多篇文章和许多文章,详细介绍了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脚本的帮助下,我发现它执行了类似的操作,因此我能够弄清楚要使此方法起作用需要做些什么。

以下是确保正确设置所有步骤的步骤:

  1. 确保在.profile或.bash_profile中的PYTHONPATH(在此处和此处,以及更多信息。请在此处)中具有所需的变量,以用于要在其中测试脚本的任何shell,以确保其有效。

  2. 编辑您的crontab,以在cron作业中包含运行脚本所需的目录(在此处和此处)。

一)一定要包括在PATH变量(。)作为解释的根目录在这里。基本上,如果您使用命令运行可执行文件,则它必须能够找到存储可执行文件的根目录或目录,以及以下可能的目录:(/ sbin:/ bin:/
usr / sbin:/ usr / bin)。

  1. 在您的crontab文件中,创建一个cronjob,它将当前目录更改为您之前成功运行脚本的目录(例如/ Users / user / Documents / foo)。

a)如下所示:

    * * * * cd /Users/user/Documents/foo; bar -l doSomething -v
  1. 由于我的问题专门针对调用可执行文件,因此有必要注意,有多种编写Python脚本来运行的方法(尽管在发现过程中,我了解到这适用于使用cron中的子进程进行的任何调用)。

第一种方法如下所示:

    ... #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,也未为从您的运行中的