2017-04-15 4 views
1

私は、私が書いているエリクシールライブラリの一部として実行するPythonスクリプトを持っています。つまり、アプリケーションを起動すると、start_link関数の1つにSystem.cmd("python", [path/to/script], [])が実行されます。スクリプトへのエリクシライブラリのアプリケーションパス

ユーザーのdeps/mylibrary/libフォルダにスクリプトをインストールします。

path/to/scriptは、私が行う方法がわからない部分です。System.cwd()を評価して結果を見て、スクリプトがどこにあるのか推測できますが、これは間違っているようです。

ミックスを使用してこれを行う方法が必要であると思います。

+0

私は通常、現在のソースファイルに相対的なパスを得るために 'Path.expand'と' __DIR__'を使用します。 'Path.expand(" path/to/script "、__DIR __)'となります。これがあなたのために働くかどうか分かりますか? (あなたはこれを呼び出すファイルに応じて '../path/to/script'や' ../../ path/to/script'を実行する必要があるでしょう) – Dogbert

+0

@Dogbertはい、そうです作品!しかし、これが標準的なやり方であるかどうかも疑問に思っていました。多くのElixirライブラリは、Elixir以外の依存関係を持っている必要があります。これらは通常deps/whatever/libにインストールされていますか? – MaxStrange

+1

私は実行時にアクセスしたいファイルを 'priv /'フォルダに入れて、 ':code.priv_dir(:my_package)'を使ってコードからアクセスできることを確信できます。 http://stackoverflow.com/questions/43414104/read-files-in-phoenix-in-production-modeと私のコメントを参照してください。 – Dogbert

答えて

2

実行時にライブラリ/パッケージに必要なファイルは、priv/フォルダに保存する必要があります。このディレクトリにあるすべてのものはErlangリリースに存在します。蒸留所。実行時に、:code.priv_dir/1によって返されたパスを使用して、パッケージのprivディレクトリの場所を知ることができます。あなたのPythonスクリプトがpriv/foo/bar.pyである場合

だから、あなたが使用してそのファイルの絶対パスを取得することができます::my_packageはあなたのパッケージの名前です

Path.join(:code.priv_dir(:my_package), "foo/bar.py") 

関連する問題