0

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

我已经创建了我的 plist,将其加载到 launchctl 但它无法正常工作。在进行了一些挖掘之后,我调试并收到以下错误消息: Traceback (last recent call last): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/ common/service.py",第 72 行,在 start self.process = subprocess.Popen(cmd, env=self.env, File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/subprocess .py”,第 854 行,在init self._execute_child(args,可执行文件,preexec_fn,close_fds,文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/subprocess.py”,第 1702 行,在 _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory:

在处理上述异常的过程中,又出现了一个异常:

回溯(最后一次调用):文件“/Users/petersmith/Documents/Python/thenewsproject/link_getters/link_getter.py”,第 3 行,在 import myfile 文件“ /Users/directories/myfile.py ”,第 51 行,在browser = webdriver.Chrome('chromedriver', options=chrome_options)
文件 "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/chrome/webdriver.py",第 73 行,在init self.service.start() 文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/common/service.py”中,第 81 行,在开始引发 WebDriverException(selenium.common.exceptions.WebDriverException:消息:“chromedriver”可执行文件需要在 PATH 中。请参见https://sites.google.com/a/chromium.org/chromedriver/home

我在粘贴时以粗体更新了项目。

这是它大惊小怪的那一行: browser = webdriver.Chrome('chromedriver', options=chrome_options)

现在,chromedriver 位于我的 usr/local/bin 文件夹中,我检查了我的路径文件并查看: -bash: /Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/mysql/bin: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/ _当前/命令:/应用程序/Xamarin:没有这样的文件或目录

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

有任何想法吗?

4

2 回答 2

1

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

我发现以下工作:

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

之后您需要重新启动并且无需重新加载 plist 文件(除非您对其进行了编辑)。

于 2021-05-12T09:22:52.773 回答
0

好的-经过大量搜索后,我终于弄清楚了。实际上有两件事在让我工作时引起了我的问题,它们都与 launchctl代表用户执行工作的方式有关。

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

  1. 它有自己的 PATH 变量(您需要使用您的 chromedriver 位置更新),并且
  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>

希望这对其他人有帮助!

于 2020-05-31T13:41:46.457 回答