2014-12-03 25 views
1

我正在開發一個依賴於NodeJS和Express模塊​​的Web應用程序,我試圖從Express路線運行Python腳本。我想要做的是將Python腳本存儲在/public/scripts/test.py中,並使用相對URL(如/scripts/test.py)引用它,以便Node不需要知道任何關於它運行的環境。使用相對URL從NodeJS/Express實例執行Python腳本

我試圖通過使用python-shell module和簡單地使用節點的內置ChildProcess來執行Python腳本。在這兩種情況下,我遇到了同樣的問題 - Python腳本的路徑似乎被視爲絕對的,因此腳本未執行,導致文件未找到錯誤。

我該如何去調用一個相對URL的Python腳本?我對網絡開發並不熟悉,如果我只是誤解了這種情況,我不會感到驚訝。

編輯: 正如jfreind00所指出的,process.cwd()可以用來識別當前的工作目錄,其上可以建立一個腳本的URL。像魅力一樣工作。

+0

從節點調用程序遵循所有通常預期的路徑規則。如果您在路徑前面加上'/',那麼系統會查找當前目錄卷的根目錄。如果您不希望節點知道您的外部目錄結構,請爲您的python腳本設置位置或路徑前綴的環境變量,並讓節點腳本讀取該環境變量。無論哪種方式,節點必須知道實際的路徑,它必須位於節點當前的工作目錄中,或者必須位於路徑中,並且必須使用將搜索路徑的內容來運行它。 – jfriend00 2014-12-03 18:53:46

+0

這將是一個理想的解決方案 - 我想我不清楚什麼節點認爲當前的目錄卷。無論我將Python腳本引用爲Node的當前目錄是'routes /'還是app.js所在項目的根目錄,我仍然會遇到404錯誤。 – 2014-12-03 19:03:00

+0

['process.cwd()'](http://nodejs.org/api/process.html#process_process_cwd)將獲得當前工作目錄。您可以將其輸出到控制檯並查看配置中的內容。在任何給定的模塊中,還有'__filename'和'__dirname'屬於當前正在運行的代碼所在的特定nodejs模塊。 – jfriend00 2014-12-03 19:11:35

回答

1

將我的意見轉換爲答案,以便您可以將此問題標記爲已解決。

從節點調用程序遵循所有通常預期的路徑規則。如果在路徑前加上/,則系統會查找當前目錄卷的根目錄。如果您不希望節點知道您的外部目錄結構,請爲您的python腳本設置位置或路徑前綴的環境變量,並讓節點腳本讀取該環境變量。無論哪種方式,節點必須知道實際的路徑,它必須位於節點當前的工作目錄中,或者必須位於路徑中,並且必須使用將搜索路徑的內容來運行它。

如果你想看到當前工作目錄是在特定的配置是什麼,那麼你可以使用:

console.log(process.cwd()); 

看到當前的工作目錄是這樣你可以看到如何在立足您的路徑那。