我有一个脚本,它调用另外两个脚本。
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)运行在带有激活anaconda环境的控制台中的web服务器;2)在具有激活anaconda环境的控制台中运行的ngrok服务。
发布于 2015-04-07 19:25:06
将Script1.ps1更改为作为作业启动python:
./activate anaconda_env
cd C:\webserver
Invoke-Command -ScriptBlock {.\python.exe api_server.py} -AsJob -ComputerName .我没有您正在使用的特定脚本,所以我用3.43附带的turtle.py测试了这个脚本,它看起来很好用。
发布于 2015-04-07 20:07:32
您不需要使用调用表达式从另一个脚本运行Powershell脚本。运行它就像在命令行中一样
c:\script1.ps1
c:\script2.ps1现在,如果script1.ps1启动一个不退出的进程,它将停止对脚本中的下一个语句的执行,从而阻止第二个脚本的运行。在大多数情况下,这种顺序执行正是您想要的。
在您的情况下,您可以使用启动进程异步启动脚本。因此,您的主要脚本变成了如下所示:
start-process c:\script1.ps1
start-process c:\script2.ps1启动过程基本上启动一个新的命令shell来运行语句。查看文档以获得更多信息。有很多参数可以用来调整这种情况的发生方式。
发布于 2015-12-09 15:37:22
若要没有调用-表达式关闭脚本,可以将输出输送到output。上面的代码如下所示:
Invoke-Expression C:\script1.ps1 | Out-Null
Invoke-Expression C:\script2.ps1 | Out-Nullhttps://stackoverflow.com/questions/29499115
复制相似问题