Внутри shell-сценария: запись вывода Python в файл работает с терминала, "входной поток пуст" при запуске из launchd

Я написал короткий сценарий оболочки для записи содержимого заметки Evernote в файл с Geeknote, который работает под python:

#!/bin/bash
/usr/bin/python /Users/me/Git/geeknote/geeknote.py find --search "Hobbies To Do" > /dev/null
/usr/bin/python -u /Users/me/Git/geeknote/geeknote.py show "Hobbies To Do" | tee /Users/me/Programming/output.txt

Скрипт работает нормально, когда я запускаю его из терминала (он записывает вывод второй команды python в output.txt), хотя в идеале я бы хотел, чтобы скрипт периодически запускался сам по себе. Поэтому я попытался создать.plist/LaunchAgent для запуска скрипта, но когда я делаю это, единственное, что записывается в output.txt, это Input stream is empty... не могу понять, почему. Прямо сейчас мой.plist выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.me.geektoolcron</string>

  <key>ProgramArguments</key>
  <array>
    <string>/Users/me/Programming/script.sh</string>
  </array>

  <key>StartInterval</key>
  <integer>10</integer>

  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

1 ответ

Вы можете попробовать заменить вторую команду python чем-то вроде echo a или замена тройника с перенаправлением. Такой сценарий работал для меня с тем же списком:

#!/bin/bash

date | tee /tmp/f

launchd также поддерживает направление stdout в файл:

<key>StandardOutPath</key>
<string>/Users/me/Programming/output.txt</string>
Другие вопросы по тегам