首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在启动web服务器后继续执行Powershell脚本?

如何在启动web服务器后继续执行Powershell脚本?
EN

Stack Overflow用户
提问于 2015-04-07 18:56:35
回答 3查看 4.6K关注 0票数 2

我有一个脚本,它调用另外两个脚本。

script0.ps1

代码语言:javascript
复制
Invoke-Expression C:\script1.ps1
Invoke-Expression C:\script2.ps1

第一个脚本启动web服务器:

script1.ps1

代码语言:javascript
复制
./activate anaconda_env     
cd C:\webserver
python api_server.py

第二个脚本启动ngrok服务:

script2.ps1

代码语言:javascript
复制
./activate anaconda_env
cd c:\ngrok
./ngrok -subdomain=mysd 8000

问题是script0.ps1只执行script1.ps1。此时,web服务器开始在控制台中运行,因此没有执行script0.ps1的第二个命令。

如何编写脚本,以便执行这两个命令?或者,如何只编写一个脚本来执行所有命令,但只能在两个单独的控制台中执行?

最终的结果应该是: 1)运行在带有激活anaconda环境的控制台中的web服务器;2)在具有激活anaconda环境的控制台中运行的ngrok服务。

EN

回答 3

Stack Overflow用户

发布于 2015-04-07 19:25:06

将Script1.ps1更改为作为作业启动python:

代码语言:javascript
复制
./activate anaconda_env     
 cd C:\webserver
 Invoke-Command -ScriptBlock {.\python.exe api_server.py} -AsJob -ComputerName .

我没有您正在使用的特定脚本,所以我用3.43附带的turtle.py测试了这个脚本,它看起来很好用。

票数 0
EN

Stack Overflow用户

发布于 2015-04-07 20:07:32

您不需要使用调用表达式从另一个脚本运行Powershell脚本。运行它就像在命令行中一样

代码语言:javascript
复制
c:\script1.ps1
c:\script2.ps1

现在,如果script1.ps1启动一个不退出的进程,它将停止对脚本中的下一个语句的执行,从而阻止第二个脚本的运行。在大多数情况下,这种顺序执行正是您想要的。

在您的情况下,您可以使用启动进程异步启动脚本。因此,您的主要脚本变成了如下所示:

代码语言:javascript
复制
start-process c:\script1.ps1
start-process c:\script2.ps1

启动过程基本上启动一个新的命令shell来运行语句。查看文档以获得更多信息。有很多参数可以用来调整这种情况的发生方式。

票数 0
EN

Stack Overflow用户

发布于 2015-12-09 15:37:22

若要没有调用-表达式关闭脚本,可以将输出输送到output。上面的代码如下所示:

代码语言:javascript
复制
Invoke-Expression C:\script1.ps1 | Out-Null
Invoke-Expression C:\script2.ps1 | Out-Null
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29499115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档