我有一个软件框架,其中包含多个需要顺序运行的组件。例如,我有一个Python脚本来解析数据,另一个Python脚本通过REST API将数据发布并保存到数据库中,还有一个Java程序从数据库中获取已解析的数据并对其进行一些分析。因此,一个输出链接到另一组件的输入。
我想知道如何使这些任务自动化以在Windows平台上依次运行。 PowerShell是实现具有相互关联的输入/输出流的程序的这种顺序执行的好工具吗?
如果PowerShell是一个合适的选择,那么如果有人可以给我一个如何实现这种顺序应用程序执行的示例,那就太好了。我以前从未使用过PowerShell,而我在PowerShell上查找的教程并未具体提及此类任务。
答案 0 :(得分:1)
可能我还没有完全了解情况的复杂性。我将首先编写一个脚本,该脚本使用调用运算符&
运行三(3)个程序。
=== Run-Them.ps1
& prog1.exe
& prog2.exe
& prog3.exe
答案 1 :(得分:0)
所以我收集的是您需要在每个脚本运行到下一个脚本之后传递数据
因此我们可以使用RedirectStandardOutput
中的ProcessStartInfo
和StandardOutput.ReadToEnd()
中的Process
来实现
function Run-Process($Location, $Arguments = $Null){
$info = New-Object System.Diagnostics.ProcessStartInfo
$info.FileName = $Location
$info.Arguments = $Arguments
$info.RedirectStandardOutput = $True
$info.UseShellExecute = $false
$info.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden
$proc = New-Object System.Diagnostics.Process
$proc.StartInfo = $info
$proc.Start() | Out-Null
$proc.WaitForExit()
return $proc.StandardOutput.ReadToEnd()
}
$Data = Run-Process Parser.py -Arguments "<filepath>"
$Data = Run-Process POSTClient.py -Arguments $Data
Run-Process Analysis.java -Arguments $Data
答案 2 :(得分:0)
为简单起见,为什么不从批处理文件开始,然后就可以决定是否需要Powershell的灵活性和控制能力。从长远来看,Powershell绝对值得学习。
首先创建您的批处理文件。例如,创建一个新的文本文件并将其重命名为MyBatchFile.CMD
然后打开记事本(我最喜欢的编辑器当前是Visual Studio Code,我推荐它)
我们如何从这里运行python?首先我们用谷歌搜索它:
http://www.cs.bu.edu/courses/cs108/guides/runpython.html
这为我们提供了此示例:
C:\python27\python.exe Z:\code\hw01\script.py
显然,您将需要针对您的设置进行调整。您可能还需要引用它以允许空格
现在在末尾添加一个暂停,以使窗口不会消失:
"C:\python27\python.exe" "Z:\code\hw01\script.py"
PAUSE
保存此文件,然后双击它。奏效了吗?没有?调整直到它。
现在添加您的第二个python文件,并确保在另一个文件完成之前它不会启动:
"C:\python27\python.exe" "Z:\code\hw01\script.py"
"C:\python27\python.exe" "Z:\code\hw01\script2.py"
PAUSE
现在了解如何从命令行运行Java:
How do I run a Java program from the command line on Windows?
"C:\python27\python.exe" "Z:\code\hw01\script.py"
"C:\python27\python.exe" "Z:\code\hw01\script2.py"
"C:\Program Files\Java\jdk1.5.0_09\bin\java" "C:\myjars\filenamehere.java"
PAUSE
现在...您可以决定是否要使用变量使此批处理文件更复杂,或考虑改为使用Powershell
如果您要继续使用批处理文件并要安排此时间,请确保从其中删除PAUSE