2017-04-15 13 views
1

我有一個Python腳本,作爲我寫的Elixir庫的一部分運行 - 也就是說,在啓動應用程序時,我在我的一個start_link函數中運行System.cmd("python", [path/to/script], [])Elixir庫應用程序路徑到腳本

我將腳本安裝在用戶的deps/mylibrary/lib文件夾中。

path/to/script是我不知道該怎麼做的部分 - 我可以通過評估System.cwd()並查看結果來推斷腳本的位置,但這看起來是錯誤的。

我覺得必須有一種方法來使用Mix來做到這一點。

+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/文件夾中。該目錄中的所有內容都將出現在由例如酒廠。在運行時,您可以使用:code.priv_dir/1返回的路徑知道程序包的priv目錄的位置。

所以,如果你的Python腳本是priv/foo/bar.py,你可以用得到該文件的絕對路徑:

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

其中:my_package是你的包的名稱。