Автоматизация разных частей рамок - PullRequest
0 голосов
/ 25 мая 2019

У меня есть программная структура, состоящая из нескольких компонентов, которые должны работать последовательно. Например, у меня есть скрипт Python, который анализирует данные, другой скрипт Python, который помещает данные через API REST и сохраняет их в БД, и программа на Java, которая извлекает проанализированные данные из БД и выполняет их анализ. Таким образом, один выход связан с входом другого компонента.

Я хочу знать, как я могу автоматизировать эти задачи для последовательного выполнения одной за другой на платформе Windows. Является ли PowerShell хорошим инструментом для последовательного выполнения программ с взаимосвязанным потоком ввода / вывода?

Если PowerShell является подходящим выбором, было бы здорово, если бы кто-нибудь мог дать мне пример того, как добиться такого рода последовательного выполнения приложений. Я никогда раньше не использовал PowerShell, и в руководствах, которые я посмотрел по PowerShell, не упоминалось об этой задаче.

Ответы [ 3 ]

1 голос
/ 26 мая 2019

Может быть, я еще не до конца понимаю сложность ситуации. Я бы начал с написания скрипта, который запускает три (3) программы с использованием оператора вызова &.

=== Run-Them.ps1

& prog1.exe
& prog2.exe
& prog3.exe
0 голосов
/ 28 мая 2019

Почему бы вам не начать с командного файла для простоты, тогда вы можете решить, требуется ли вам гибкость и контроль над 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 изкомандная строка:

Как запустить программу Java из командной строки в 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 из него

0 голосов
/ 26 мая 2019

Итак, я собираюсь передать данные после запуска каждого сценария следующему сценарию

Таким образом, мы можем сделать это, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...