Я использую цикл while в perl, чтобы выполнить скрипт на python и прочитать вывод построчно. Сценарий python вставляет данные в базу данных, выводится оператор слияния или вставки, а результат также отправляется на стандартный вывод. Скрипт perl читает это, но он буферизует и не включает всю информацию, пока скрипт python не завершится с каждым слиянием / вставкой. Я пытался использовать unbuffer, но он все еще обрезает данные.
Я пытался использовать unbuffer
open(P,"unbuffer master_program_insert.py 2>&1 |");
while(<P>) {
chop;
print OF "$_\n";
}
close(P)
, следя за журналом. Я вижу вывод, но он обрезается. Команда слияния выполняется, но показывает только половину команды. Как только слияние завершается, оно выводит оставшуюся часть команды слияния и результат слияния.
вывод, который я вижу:
"слияние в tar dbtable1 с использованием (выберите отдельный S_Customer, S_Src, T_Customer, T_Src, start_date, end_date, flg_ins_upd, случай, когда flg_ins_upd = 0, тогда случай, когда S_Customer = T_Customer и S_Src = T_Src, затем 0 еще 2 заканчиваются еще 1, заканчиваются как flg_real_ins_upd из (выберите STG.Crc ... , TGT.Customer как T_Customer, TGT.Src как T_Src, Start_date, end_date, случай, когда TGT.Customer равен нулю, а затем 1 или 0 завершается как flg_ins_upd из dbtable1 STG левого внешнего соединения dbtable2 TGT на STG.Customer = TGT.Custo. end_date = '9999-12-31') a) источник в tar.Customer = source.s_customer при сопоставлении и "
фактический оператор слияния:
" объединяется в tar dbtable1 с помощью (выберите отдельныйS_Customer, S_Src, T_Customer, T_Src, start_date, end_date, flg_ins_upd, случай, когда flg_ins_upd = 0, затем случай, когда S_Customer = T_Customer и S_Src = T_Src, затем 0, иначе 2, конец, еще 1, конец как flg_real_ins_upd из (выберите STG.Customer в качестве S_Customer, STG.Src в качестве S_Src, TGT.Customer в качестве T_Customer, TGT.Src в качестве T_Src, Start_date, end_dT.C, когда T =null, затем 1, иначе 0 завершается как flg_ins_upd из dbtable1 STG левого внешнего соединения dbtable2 TGT на STG.Customer = TGT.Customer и TGT.end_date = '9999-12-31') a) source на tar.Customer = source.s_customer при совпадениии source.flg_real_ins_upd = 2 и tar.end_date = '9999-12-31' затем обновите набор tar.end_date = DATEADD (Day, -1, current_date), если не найдено совпадение, и source.flg_real_ins_upd = 1 затем вставьте значения (source.s_customer, source.s_src, current_date, '9999-12-31') "