Как сделать ожидание выполнения стороннего скрипта в ZP?

Romanuss

Client
Регистрация
15.03.2014
Сообщения
37
Благодарностей
6
Баллы
8
Всем привет.
Есть закрытый шаблон А. Подключаю его в свой шаблон Б через "Запуск программы" через bat файл.
Всё работает, добавляем 1 выполнение.

Но мне нужно дождаться выполнения работы этого шаблона А (батник).
Как это можно сделать? В теории можно пытаться отследить его работу по результату (в определенной папке будут файлы, он может быть 1, а может быть N + название генерится, что затрудняет отслеживание, например "query_1742227688_1742227710).

Может есть варианты, как подождать этого 1 выполнения шаблона А?
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 784
Благодарностей
1 377
Баллы
113
Получай количество работающих потоков шаблона А, соответственно, исходя из этого, решай, что делать дальше. Если он не работает, в ответе будет 0.

C#:
int Count_Threads= ZennoPoster.GetThreadsCount(project.Variables["Template_Name"].Value);
return Count_Threads;
В переменной Template_Name название шаблона А, как он указан в зенке (без .zp в конце).
 
  • Спасибо
Реакции: j2082192 и Romanuss

Romanuss

Client
Регистрация
15.03.2014
Сообщения
37
Благодарностей
6
Баллы
8
Получай количество работающих потоков шаблона А, соответственно, исходя из этого, решай, что делать дальше. Если он не работает, в ответе будет 0.

C#:
int Count_Threads= ZennoPoster.GetThreadsCount(project.Variables["Template_Name"].Value);
return Count_Threads;
В переменной Template_Name название шаблона А, как он указан в зенке (без .zp в конце).
Т.к. у меня батник - пробую так + пробую просто по названию файла (но т.к. файлов много, то нужно мониторить по версии батника):
C#:
int Count_Threads = ZennoPoster.GetThreadsCount("2-GPT.bat");
project.SendInfoToLog("Количество потоков батника: " + Count_Threads.ToString());

int Count_Threads2 = ZennoPoster.GetThreadsCount("GPT");
project.SendInfoToLog("Количество потоков с названием 2: " + Count_Threads2.ToString());

return Count_Threads;
Всегда пишет -1 в логе.
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 784
Благодарностей
1 377
Баллы
113
Т.к. у меня батник - пробую так + пробую просто по названию файла (но т.к. файлов много, то нужно мониторить по версии батника):
Причем здесь батник? У тебя батник что запускает? Шаблон в зенке? Или какую-то стороннюю программу?
Этот сниппет - для проверки потоков шаблона в зенке. Насколько я понял, ты батником запускаешь "шаблон А", у шаблона в Зеннопостере есть название. Это название и указываешь в переменной.
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 784
Благодарностей
1 377
Баллы
113
Если вдруг у тебя стороняя программа запускается, а не шаблон в зенке, можно попробовать проверять работу процесса.
C#:
string processName = project.Variables["process_to_check"].Value; // имя процесса
return System.Diagnostics.Process.GetProcessesByName(processName).Any(); // вернёт True или False
У меня так на серверах стоит проверка на то, работает ли, допустим, Dropbox (было как-то, по какой-то причине отваливался). Если отвалился, запускается заново.
Имя процесса смотри в диспетчере задач.
 
  • Спасибо
Реакции: j2082192

Romanuss

Client
Регистрация
15.03.2014
Сообщения
37
Благодарностей
6
Баллы
8
Причем здесь батник? У тебя батник что запускает? Шаблон в зенке? Или какую-то стороннюю программу?
Этот сниппет - для проверки потоков шаблона в зенке. Насколько я понял, ты батником запускаешь "шаблон А", у шаблона в Зеннопостере есть название. Это название и указываешь в переменной.
Всё так, батник запускает шаблон зенки. Но файл-то один, а в ZP у меня 14 вариаций его запуска с разными настройками. Если указать просто название ZP файла - он же будет проверять ЛЮБУЮ из 14 его вариаций (т.к. файл-то то 1)? А мне нужна проверка файла с конкретным импортом настроек, потому в батнике и запускаю.

Но в качестве проверки я так же проверял и по названию файла (GPT.zp) - результат "-1".
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 784
Благодарностей
1 377
Баллы
113
Всё так, батник запускает шаблон зенки. Но файл-то один, а в ZP у меня 14 вариаций его запуска с разными настройками. Если указать просто название ZP файла - он же будет проверять ЛЮБУЮ из 14 его вариаций (т.к. файл-то то 1)?
Нужно указать не название ФАЙЛА шаблона, а название шаблона непосредственно в Зеннопостере. Я не знаю, как у тебя реализовано. Возможно, у тебя 14 вариантов этого шаблона с разными настройками, и каждый имеет свое название (непосредственно в списке шаблонов в Зенке). Тогда по этому названию и проверяй. Или у тебя только один шаблон в зенке (не файл, а именно в зенке), а ты через батник ему передаешь настройки?
Насчет проверки по GPT.zp я сразу написал, что без .zp в конце. В твоем случае - просто GPT (если он именно в Зеннопостере так называется, про название файла шаблона вообще забудь).
На примере... У меня один и тот же шаблон добавлен в зенку пять раз, у каждой копии - свое название и свои настройки.
131684

Соответственно, для проверки каждого в названии шаблона я указываю "Парсинг товаров - 1", "Парсинг товаров - 2", "Парсинг товаров - 3" и т.д. Сам файл шаблона - один, и вторично, как он называется и где лежит. Проверка идет непосредственно в Зеннопостере по названию ШАБЛОНА в Зеннопостере (а не имени файла этого шаблона).

PS. Приложил шаблон. Добавь его в Зенку. Открой его настройки. Впиши туда имя шаблона, который надо проверить (чтобы не ошибиться, кликни правой кнопкой на нужный шаблон в Зенке -> Переименовать -> Скопируй весь текст). Запусти.
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: Romanuss

Romanuss

Client
Регистрация
15.03.2014
Сообщения
37
Благодарностей
6
Баллы
8
аааа :-)
Всё сразу заиграло, спасибо :-)
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 784
Благодарностей
1 377
Баллы
113

Romanuss

Client
Регистрация
15.03.2014
Сообщения
37
Благодарностей
6
Баллы
8
Оно? То, что надо? Удастся таким способом все реализовать?
ага, прям то, что нужно.

Для потомков решение:
C#:
int Count_Threads = 1;

while (Count_Threads > 0)
{
    System.Threading.Thread.Sleep(5 * 1000);
    Count_Threads = ZennoPoster.GetThreadsCount("5б");
}

project.SendInfoToLog("☑ Написал и залил дополнительные статьи для " + project.Variables["domain"].Value, true);
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)