У меня есть потоки NiFi для обслуживания API с HTTPRequest и HTTPResponse. В одном из таких потоков у меня есть RunMongoAggregation, и выходные данные из этой агрегации передаются в EvaluateJSONPath в конечный процессор ExecuteStreamCommand.
Ввод ExecuteStreamCommand выглядит следующим образом:
"${http.param.floorid}";${fourteendaysback};${sevendaysback};${currentday};${AverageTimeTakenPerJob};${TotalTimesForkliftLoaded};${TotalTimesForkliftUnloaded};${TotalTimesForkliftOnHalt};${TotalJobsCompleted};
где http.param.floorid = Магазин 1
В ExecuteStreamCommand я передаю; в качестве разделителя и файла для выполнения является сценарий оболочки
Для отладки я напечатал аргументы, которые передаются скрипту оболочки, который, в свою очередь, запускает скрипт python.
Выход:
#From List Queue <the below output coming from the echo statement within the shell script>
Shop Floor 1 1547251200000 1547856000000 1548374400000 23.133333333333333 150 132
Это не принимает последние 2 значения для TotalTimesForkliftOnHalt и TotalJobsCompleted.
По данным Provenance:
execution.command.args
"Shop Floor 1";1547251200000 ;1547856000000 ;1548374400000;23.133333333333333;150;132;18;132;
execution.error
Traceback (most recent call last): File "asset_efficiency_trend.py", line 13, in <module> TotalTimesForkliftOnHalt=int(sys.argv[8]) IndexError: list index out of range
Когда я запускаю скрипт оболочки из терминала со всеми аргументами (с 1-м аргументом в двойных кавычках), он работает нормально.
Я проверил пару других потоков, где я использую ExecuteStreamCommand и где используется тот же «$ {http.param.floorid}» вместе с другими параметрами. Они работают без проблем.
Я пытался использовать процессор UpdateAttribute для добавления и добавления двойных кавычек вокруг floorid. Но все равно не повезло.
Есть ли максимальное количество аргументов, которые я могу передать в ExecuteStreamCommand?
Как я могу решить это?