Nano Hash - криптовалюты, майнинг, программирование

Как зафиксировать статус успешности / неудачи рабочего процесса PowerCenter в среде PERL с помощью командной строки pmcmd?

Я пытаюсь запустить рабочий процесс Informatica PowerCenter с помощью команды pmcmd из Strawberry Perl. Я не могу работать в случае получения ошибочных данных в исходных файлах. После сбоя рабочего процесса PowerCenter я хочу отправить электронное письмо из сценария Perl (а не из задачи «Пост-сеанс» в свойствах сеанса). Пожалуйста, помогите в захвате статуса рабочего процесса из Perl-скрипта. Я очень ценю ваше время и помощь.

Я пробовал несколько вариантов, таких как using system (), qw (), IPC :: Run3, IPC :: System :: Simple qw (system) и т. Д., Но все же я не могу зафиксировать успех или неудачу выполнения рабочего процесса. Мне также известно о pmcmd getworkflowdetails, но это был бы мой последний вариант.

use strict;
use warnings;
use IPC::Run3;

use IPC::System::Simple qw(system);
my ($stdout, $stderr,$command,$run);

$command = "pmcmd.exe startworkflow -sv......." # not putting the complete command as it is very lengthy
$run = run3($command);

if ( $run == 0) {
print "success";
} else {
print "fail ";
}

У меня 2 рабочих процесса, 1 неудачный и 1 успешный. Но какой бы вариант я ни пробовал, он дает одинаковый результат для выполнения рабочего процесса.


  • Ничто в этом на самом деле не запускает команду. Вы не использовали систему из IPC :: System :: Simple или run3 из IPC :: Run3. Оператор readpipe - qx, а не qw, который просто возвращает список слов. 17.10.2019
  • Я не разместил здесь все опробованные варианты, так как это будет очень долго. Но на самом деле я слежу за выполнением в мониторе рабочего процесса, и он выполняется. 17.10.2019
  • Тогда ваш код не тот, что вы показали. 17.10.2019
  • Я отредактировал его одним из своих кодов. 17.10.2019

Ответы:


1

Каждый из этих методов имеет разные способы индикации успеха, и есть также два разных типа успеха: успешное выполнение и статус выхода, возвращаемый процессом.

IPC :: System :: Simple system выдаст исключение, если команда завершится неудачно. или возвращает ненулевой статус. Вы можете определить приемлемые ненулевые статусы, передав ссылку на массив в качестве первого аргумента. Проще всего, когда вы хотите, чтобы ошибки приводили к смерти вашей программы с помощью полезного сообщения об ошибке, поэтому вам не нужна обработка исключений, такая как eval или try / catch.

use strict;
use warnings;
use IPC::System::Simple qw(system EXIT_ANY);

system $cmd; # failure or non-zero exit will cause program to die

my $exit = system EXIT_ANY, $cmd; # failure to execute will cause program to die

use Syntax::Keyword::Try;
try {
  system $cmd;
} catch {
  # error in $@
}

try {
  my $exit = system [0..5], $cmd;
  if ($exit) {
    # one of the allowed non-zero exit status
  }
} catch {
  # error in $@
}

try {
  my $exit = system EXIT_ANY, $cmd;
  if ($exit) {
    # non-zero exit status
  }
} catch {
  # error starting command in $@
}

IPC :: Run3 выдаст исключение, если команда завершится неудачно, и установит $? в статус ожидания. Его возвращаемое значение всегда истинно.

use strict;
use warnings;
use IPC::Run3;
use Syntax::Keyword::Try;

try {
  run3 $cmd;
  if ($?) {
    # non-zero exit status
    my $exit = $? >> 8;
  }
} catch {
  # error starting command in $@
}

qx или обратные кавычки, являющиеся оператором readpipe, не вызовут исключения, но вернут undef в случае сбоя команды для запуска, а в противном случае установите $? так же, как IPC :: Run3.

use strict;
use warnings;

my $output = `$cmd`;
if (!defined $output) {
  # error occured starting command, check $!
} elsif ($?) {
  # non-zero exit status
  my $exit = $? >> 8;
}

Встроенная функция system вернет статус ожидания или -1, если команда не запустилась, и установите то же значение в $?.

use strict;
use warnings;

system $cmd;
if ($? == -1) {
  # error occured starting command, check $!
} elsif ($?) {
  # non-zero exit status
  my $exit = $? >> 8;
}

Обратите внимание, что все эти параметры, кроме оператора readpipe (но см. Мой IPC :: ReadpipeX ) поддерживают передачу команды в виде списка, который обходит оболочку и, следовательно, более безопасен, когда команда может содержать произвольный ввод, но иногда может быть ошибочным в Windows, поскольку он только делает вид, что обходит оболочку там.

system 'pmcmd.exe', 'startworkflow', '-sv', ...;
run3 ['pmcmd.exe', ...];
16.10.2019

2

Спасибо, Гриннз за ваше время и объяснения! Это действительно помогло мне в моих знаниях. На мой вопрос, проблема была в моей команде pmcmd. Мне не хватало опции -wait для использования в качестве аргумента. Следовательно, команда pmcmd просто возвращала общий код ошибки, равный 0. После использования -wait я мог зафиксировать статус отказа рабочего процесса. Еще раз спасибо !

Для тех, кто сталкивается с такой же проблемой, вот полная команда, которую я использую:

pmcmd.exe startworkflow -sv <integrationservice> -d <domain> -u <user> -p <pwd> -f <folder name> -paramfile <parameter file name> -wait <workflow name>

17.10.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..