2015-04-07 103 views
1

我有一個腳本調用兩個其他腳本。如何在啓動Web服務器後繼續執行Powershell腳本?

script0.ps1

Invoke-Expression C:\script1.ps1 
Invoke-Expression C:\script2.ps1 

第一個腳本啓動Web服務器:

script1.ps1

./activate anaconda_env  
cd C:\webserver 
python api_server.py 

第二個腳本啓動是個ngrok服務:

script2.ps1

./activate anaconda_env 
cd c:\ngrok 
./ngrok -subdomain=mysd 8000 

的問題是script0.ps1只執行script1.ps1。此時,Web服務器開始在控制檯中運行,因此不執行script0.ps1的第二個命令。

如何編寫腳本以便執行這兩個命令?或者,如何編寫一個腳本來執行所有命令,但在兩個單獨的控制檯中執行?

最終的結果應該是: 1)在控制檯啓動蟒蛇環境 2)在控制檯與激活蟒蛇環境

+0

您到目前爲止嘗試過什麼?你不能簡單地在腳本中有兩個函數,然後執行它們或執行一個主函數來觸發另外兩個函數? – CalebB

回答

0

變化Script1.ps1推出蟒蛇運行ngrok服務運行Web服務器作爲作業:

./activate anaconda_env  
cd C:\webserver 
Invoke-Command -ScriptBlock {.\python.exe api_server.py} -AsJob -ComputerName . 

我不知道你在使用特定的腳本,所以我用3.43測試此與turtle.py這船和它似乎工作。

+0

在執行過程中,我可以看到一個作業計劃在script1.ps1中執行,而script2.ps1被執行。但是,問題出在第一個script1.ps1上。沒有運行服務器的控制檯(我需要進行調試),而且似乎服務器沒有運行。無法向服務器發送請求。我也嘗試單獨運行scrip1.ps1,並且控制檯也不會持續存在。順便說一句,我正在運行瓶Web服務器。 – LLaP

0

您不需要使用Invoke-Expression從另一個腳本運行Powershell腳本。只要運行它,就好像你在命令行

c:\script1.ps1 
c:\script2.ps1 

今後如果script1.ps1啓動一個過程,它不退出,將停止執行在腳本中的下一個報表,從而也避免了第二個腳本從運行。 在大多數情況下,這種順序執行正是你想要的。

就你而言,你可以通過使用Start-Process異步啓動腳本。 所以,你的主腳本變得像:

start-process c:\script1.ps1 
start-process c:\script2.ps1 

Start-Process基本上開始一個新的命令外殼運行在聲明中檢查出文檔的更多信息。有很多參數可以用來調整發生的情況。

0

如果沒有invoke-expression關閉腳本,可以將輸出管道輸出到Out-Null。您的代碼如上所示:

Invoke-Expression C:\script1.ps1 | Out-Null 
Invoke-Expression C:\script2.ps1 | Out-Null 
相關問題