質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1014閲覧

pythonのプログラムをlaunchdで動かすとパスが見つからない

nasymt

総合スコア39

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/02/11 11:38

動作環境
macOS 10.13(High Sierra)
python3.6.3

pythonのプログラムをlaunchdに登録して動かすと、簡単なコードは動作するのですが、自作モジュールを読み込もうとするとパスが見つからないとエラーが出力されます。
相対パスで読み込むのだダメかと思い、絶対パスで読み込むように変えてみても、うまくいきません。

以下のようなコードをターミナル上で動かすとパスは見つかりますが、
launchdからだとダメで"not exist"が表示されてしまいます。
解決策を教えていただけると助かります。

python

1import sys 2import os 3# 通常はこれで読み込めていた 4# import libs.subprocess.command as cmd 5 6import imp 7path = os.getcwd() + "/libs/subprocess/command.py" 8if os.path.exists(path): 9 print("exist") 10else: 11 print("not exist") 12 13cmd = imp.load_source("command", path)

~/Library/LaunchAgentsにおいたplistファイル

xml

1<plist> 2 <dict> 3 <key>Label</key> 4 <string>test</string> 5 <key>ProgramArguments</key> 6 <array> 7 <string>/usr/bin/python</string> 8 <string>/Users/.../main.py</string> 9 </array> 10 <key>RunAtLoad</key> 11 <true/> 12 <key>StandardOutPath</key> 13 <string>/Users/.../output.log</string> 14 <key>StandardErrorPath</key> 15 <string>/Users/.../error.log</string> 16 </dict> 17</plist> 18

エラーログ

Traceback (most recent call last): File "/Users/.../main.py", line 23, in <module> cmd = imp.load_source("command", pat) IOError: [Errno 2] No such file or directory

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

調べてみましたところ、launchdで実行するスクリプトは、特に指定がない場合、/にディレクトリを移動して動作すると同等になるようです。plist内でスクリプトを実行するワーキングディレクトリを指定してみてはいかがでしょうか?

plist

1 <key>WorkingDirectory</key> 2 <string>[main.pyのあるディレクトリ(フォルダ)]</string>

参考:
What is the default working directory of a script run via launchd?

投稿2020/02/11 13:12

yukkeorg

総合スコア985

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nasymt

2020/02/11 13:52

ご回答ありがとうございます。こちらの方法でうまくいきました! 調べ方が甘かったようです... ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問