当前位置: 首页 > 知识库问答 >
问题:

从launchctl运行python脚本时,Mac找不到chromedriver

贺兴昌
2023-03-14

我一直在尝试通过Launchctl安排我的一个python脚本,但遇到了一个错误。目的是它在每个小时的给定时间运行。

我已经创建了plist,并将其加载到Launchctl中,但它无法正常工作。在做了一些挖掘后,我调试并得到以下错误消息:Traceback(最近一次调用最后一次):文件/Library/框架/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/common/service.py",第72行,在开始self.process=subprocess.Popen(cmd,env=self.env,文件/Library/框架/Python.framework/Versions/3.8/lib/python3.8/subprocess.py",第854行,在init Self中。_execute_child(args,可执行文件,preexec_fn,close_fds,文件/Library/框架/Python.framework/Versions/3.8/lib/python3.8/subprocess.py",第1702行,_execute_child提高child_exception_type(errno_num,err_msg,err_filename)FileNotFoundError:[Errno 2]没有这样的文件或目录:'chromedriver'

在处理上述异常的过程中,发生了另一个异常:

Traceback(最近一次调用):文件“/Users/petersmith/Documents/Python/thenewsproject/link_getters/link_getter.py”,第3行,在导入myfile文件“/Users/directories/myfile.py”的第51行,在browser=webdriver中。Chrome('chromedriver',options=Chrome_options)
File“/Library/Frameworks/Python.Frameworks/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/Chrome/webdriver.py”,init self.service中的第73行。start()File“/Library/Frameworks/Python.Frameworks/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/common/service.py”,第81行,在start中引发WebDriverException(selenium.common.exceptions.webdriver异常:消息:'chromedriver'可执行文件需要在PATH中。请参阅https://sites.google.com/a/chromium.org/chromedriver/home

粘贴时我已经更新了粗体的项目。

这是它大惊小怪的一行:浏览器=webdriver.Chrome('chromedrive',选项=chrome_options)

现在,chromedriver 位于我的 usr/local/bin 文件夹中,我已经检查了我的路径文件,并看到: -bash: /库/框架/Python.framework/Versions/3.8/bin:/usr/local/mysql/bin:/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/本地/共享/点网:~/.dotnet/工具:/库/框架/Mono.framework/版本/当前/命令:/应用程序/Xamarin:没有这样的文件或目录

你可以用粗体看到它在那里,所以我有点迷路了。

有什么想法吗?

共有2个答案

吴兴国
2023-03-14

好吧 - 所以经过大量的搜索,我终于弄清楚了。实际上,在进行这项工作时,有两件事导致我出现问题,它们都与 launchctl 代表用户执行工作的方式有关。

要记住的关键是Launchctl将代表您执行一个进程,这意味着:

  1. 它具有自己的PATH变量(您需要使用chrome驱动程序位置进行更新),并且
  2. 它从自己的工作目录执行脚本,而不是python脚本所在的目录。对于要包含的任何其他文件或脚本中使用的相对路径,这将为您提供问题

因此,要修改launchctl的路径,您需要从终端运行以下命令:

launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

不记得当时是否需要重新启动,但一定要卸载然后重新加载plist文件

launchctl load ~Library/LaunchAgents/your.own.plist

然后你应该很高兴去。

修复第二点是一个简单的键串对来添加你的plist文件

<key>WorkingDirectory</key>
<string>/Users/you/path/to/mypythonfile/</string>

希望这对其他人有帮助!

暴英达
2023-03-14

我发现皮特史密斯的原始答案对我来说是正确的。然而,他们提供的用于更新Launchd中的PATH变量的终端命令对我不起作用(我使用的是High Sierra)。

我发现下面的工作:

sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin   

之后您需要重新启动,无需重新加载plist文件(除非您编辑了它)。

 类似资料:
  • 我在两个Python脚本之间进行通信时遇到一些问题。我对python和raspberry pi是相当陌生的,我已经发现了多种方法,经过一段时间的理解,这些方法对我来说是无用的。所以在花了几个小时之后,我想最好问问更有经验的人。 所以我正在做一个项目,我使用一个网页来通过多个覆盆子派控制多台机器。(4个覆盆子)您可以在网页上输入机器以及机器应该激活多长时间。然后,网页使用机器和时间执行Python脚

  • 问题内容: 我想从PHP运行Python脚本。该脚本的语法很好,当我从命令行运行它时,它会在它旁边生成一个图像文件。当我从命令行运行PHP文件(包含Python exec)时,它将生成一个图像文件。很好。问题是:当我使用浏览器并运行PHP时,它不会生成任何图像文件。我使用的是Xubuntu OS。 问题答案: 问题是matplotlib后端设置。我更改为“ Agg”,并且plot函数正常运行。

  • 问题内容: 我一直在尝试使用设置脚本以定期运行python程序。python程序失败,因为它找不到我的导入– 我知道这是因为我在日志文件中捕获了错误。为了解决此问题,我创建了,然后在其中复制了自己的内容,然后注销并再次登录。这似乎不足以解决问题,而且我对尝试其他方法一无所知。 我正在运行OSX 10.8.3。 相关主题: launchd执行python脚本,但导入失败(不适用-我的脚本指向正确的p

  • 问题内容: 之前曾在不同程度上提出过这样的问题,但我觉得还没有以简明的方式回答,因此我再次提出。 我想在Python中运行脚本。可以说是这样的: 它获取文件位置,读取它,然后打印其内容。没那么复杂。 好吧,那我该如何在C#中运行它呢? 这就是我现在所拥有的: 当我传递位置和位置无效时。有人告诉我,我应该通过的,然后作为。 我已经寻找了一段时间,只能找到建议使用IronPython或类似工具的人。但

  • 问题内容: 我的以下代码有问题: callBash.py: sleep.sh: 我希望10秒钟后打印“结束”。(我知道这是一个愚蠢的示例,我可以简单地在python中睡眠,但是这个简单的sleep.sh文件只是作为测试) 问题答案: 使sleep.sh可执行并添加到参数列表中(如先前答案中所建议)可以正常工作。根据搜索路径,您可能还需要添加或其他合适的路径。(即,更改为。) 如果bash脚本的第一

  • 问题内容: 我需要从Python脚本运行PowerShell函数。.ps1和.py文件当前都位于同一目录中。我要调用的函数在PowerShell脚本中。我看到的大多数答案都是关于从Python运行整个PowerShell脚本的。在这种情况下,我试图在Python脚本的PowerShell脚本中运行单个功能。 这是示例PowerShell脚本: 和Python脚本: 因此,我想以某种方式运行Powe