powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / [gt.m] Команда Xecute
22 сообщений из 47, страница 2 из 2
[gt.m] Команда Xecute
    #39334595
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gluconat_ca,

Раньше, для десктопных приложений это проблему я
решил написав функцию (VB6) на стороне клиента. (Xecute)
используя сокет
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Function Compile(str As String) As String
GTMCmd.SendData "COMPILE " & str & vbCrLf
Do Until m_blnHeaderArrived
  DoEvents
 Loop
  Compile = m_var(0)
End Function

А ошибки ловил в переменную
Код: vbnet
1.
Ret = m.Compile("zl """ & RtnName & """")

А здесь задача словить их на сервере ...
Я испробовал много, но безрезультатно.
Как не вертись ошибка на терминале выскакивает.
Можно так, напрямую, но это тоже не выход - у меня клиент на ВЕБ.
Код: plaintext
1.
2.
[root@GTM gtm63A]# mumps -dir 2>/tmp/COMPILERR.stderr
GTM>zl "gl.m"
GTM> [code=plaintext]
А вот что испробовал и не только ..
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
GET
 n compile
 s p="zlinc"
 s e="Errors"
 ;zsy "2>/tmp/COMPILERR.stderr"
 o p:(shell="/bin/bash":command="2>/tmp/zlink.err")::"pipe"
 ;s file="gl.m"
 ;o p:(shell="/bin/sh":comm="cat")::"PIPE"
 ;s compile="zl """_file_"""" 
 ;U TCPIO x compile
 ;u p ZL file
 zl file
 ;w "Cito za h.. ???",!
 ; r x
 ;w /eof f  r x q:$zeof  u p w x,!
 ;s %fcgi("o","stdout",i)=x_$C(13,10)
 ;u p i x="" s in="During compilation, the error is not detected in routine : "_$zd_file
 s %fcgi("o","stdout")=in_$C(13,10)
 s %fcgi("o","header","Content-Type")="text/plain"
 ;c TCPIO 
 q   
 ;
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334627
gluconat_ca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu,
Для PIPE есть параметр открытия, называется он 'stderr', который поможет принять основной программе вывод в stderr того, что запускается через PIPE.
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334644
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gluconat_ca,
Пробовал:
Код: plaintext
1.
2.
3.
4.
5.
 s p="zlink" 
 s e="Errors" 
 o p:(shell="/bin/bash":command="cat":STDERR=e)::"pipe" 
 u p 
 ;u e 
 ....
Может быть неправильно использую ? ):
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334645
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,
Компилируйте по-другому.
Гоним все stdXXX во временный файл:
zsystem "mumps routine.m > /tmp/appname"_$j_".output 2>&1 3>&1"
Гоним временный файл в текущий девайс:
zsystem "cat /tmp/appname"_$j_".output"
Чистимся:
zsystem "rm /tmp/appname"_$j_".output"
Подключаем рутину:
zlink "' + AName + '.m"
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334701
gluconat_ca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriugluconat_ca,
Пробовал:
Код: plaintext
1.
2.
3.
4.
5.
 s p="zlink" 
 s e="Errors" 
 o p:(shell="/bin/bash":command="cat":STDERR=e)::"pipe" 
 u p 
 ;u e 
 ....
Может быть неправильно использую ? ):примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 s p="zlink" 
 s e="Errors" 
 o p:(shell="/bin/bash":command="mumps -direct ^test":STDERR=e)::"pipe" 
 s io=$i
 ;чтение ошибок
 f  u e   r t  q:$zeof   u io  w t,!
 ;чтение обычного вывода  
 f  u p   r t  q:$zeof   u io  w t,!
 c p
программа test.m
Код: plaintext
1.
test
 zl "fuflo.m"
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334721
gluconat_ca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(с подачи ну я) вызов mumps в параметре command можно упростить.
Код: plaintext
 o p:(shell="/bin/bash":command="mumps fuflo.m":STDERR=e)::"pipe"
Пути к файлу - это уже технические детали, можно опустить :)
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334769
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gluconat_ca and Евгений !!!

Спасибо большое !!! То что надо !
А я все таки неправильно делал.. ;)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
FCGIZL ;;Compilation tools WinBuilder company "ELTRANSSOFT" :[26.10.2016 15:50:00]
 ;;
 ; Selectam routin
 n $zt s $zt=$$ztx()
 s rou=$P(%fcgi("i","header","DOCUMENT_URI"),"/",4)
 s file=$$FUNC^%TRIM(rou)
 s:$E(file)="%" $E(file)="_"
 i %fcgi("i","header","REQUEST_METHOD")="GET" d GET q
 i %fcgi("i","header","REQUEST_METHOD")="PUT" d PUT q
 q
PUT ;
 o file:(newversion)
 u file w %fcgi("i","stdin")
 u 0 c file
 q 
 ;
GET 
 s p="zlink" 
 s e="Errors" 
 o p:(shell="/bin/bash":command="mumps "_file_"":STDERR=e)::"pipe" 
 s io=$i
 ;÷òåíèå îøèáîê
 s out=""
 f  u e   r tstderr  q:$zeof   u io  s out=out_tstderr
 ;÷òåíèå îáû÷íîãî âûâîäà  
 f  u p   r terr  q:$zeof   u io  w "T#######"_t,!
 c p
 s %fcgi("o","stdout")=out_$C(13,10)
 s %fcgi("o","header","Content-Type")="text/plain"
 q
 ;
zt()
 i $zv["GT.M" q "g Error^FCGIZL"
 q "Error^FCGIZL"
 ;
Error
 s %fcgi("o","stdout")=%fcgi("o","stdout")_" <script type=""text/javascript"">"_$c(13,10)
 s $et="",$ec="",$zt=""
 s output=$zs
 s $zs=0
 s %fcgi("o","stdout")=%fcgi("o","stdout")_" alert ("""_output_""")"_$c(13,10)
 s %fcgi("o","stdout")=%fcgi("o","stdout")_" </script>"_$c(13,10)
 d out(%fcgi("o","stdout"))
 q
А здесь отправка клиенту в %fcgi("o","stdout")
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
###############
%fcgi("i","header",$C(0,0)_"гHTTP_COO")="KIESID=64217703691,3; __utma=14483063.753646529.1469952638.1474649849.1474781382.33; __utmz=14483063.1469952638.1.1.utmcsr=(dire"
%fcgi("i","header",")|utmccn=(direct)|utmcmd=(none); SID=64217703691,3; submenuMark-0=opened")=""
%fcgi("i","header","DOCUMENT_URI")="/gt.m/zl/  gl.m"
%fcgi("i","header","HTTP_ACCEPT")="*/*"
%fcgi("i","header","HTTP_ACCEPT_ENCODING")="gzip, deflate, sdch"
%fcgi("i","header","HTTP_ACCEPT_LANGUAGE")="ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"
%fcgi("i","header","HTTP_CONNECTION")="keep-alive"
%fcgi("i","header","HTTP_HOST")="192.168.1.111:8082"
%fcgi("i","header","HTTP_REFERER")=" http://192.168.1.111:8082/MENUJS.m" 
%fcgi("i","header","HTTP_USER_AGENT")="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36"
%fcgi("i","header","QUERY_STRING")=""
%fcgi("i","header","REMOTE_ADDR")="192.168.1.104"
%fcgi("i","header","REQUEST_METHOD")="GET"
%fcgi("i","header","SID")="64217703691,3"
%fcgi("o","header","Content-Type")="text/plain"
%fcgi("o","header","Set-Cookie")="SID=64217703691,4"
%fcgi("o","stdout")=$C(9)_"    q  X t w "" ;"_$C(9)_"                ^-----"_$C(9,9)_"At column 17, line 20, source module /usr/gtm63A/gl.m%GTM-E-SPOREOL, Either a space or an end-of-line was expected but not found"_$C(13,10)
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334783
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пропустил саму команду ZLINK, но это по документации как бы не ошибка

Код: plaintext
1.
<<The following GT.M commands and functions can initiate auto-ZLINKing:
DO >>

Добавил в коде.

Еще раз спасибо.
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334800
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,
Там еще нюансик. Используется имя рутины для образования имени файла с расширением m. И если первый символ имени рутины процент, то заменяется на подчеркивание.
Код: plaintext
1.
rname -> rname.m
%rname -> _rname.m
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334802
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я,
Да, в курсе. Я там вроде учел.
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334924
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в идеале это должно выглядеть примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
GET 
 s p="zlink" 
 s e="Errors" 
 o p:(shell="/bin/bash":command="mumps zl "_file_"":STDERR=e)::"pipe" 
 s io=$i
  ;read error stderr
 s (out,local)=""
 f  u e   r tstderr  q:$zeof   u io  s out=out_tstderr
 ;read simple error  
 f  u p   r terr  q:$zeof   u io  s local=local_terr
 c p
 s %fcgi("o","stdout")=out_$C(13,10)
 s %fcgi("o","header","Content-Type")="text/plain"
 q
 ;
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334941
gluconat_ca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu,
кое-что лишнее
Код: plaintext
:command="mumps zl "_file_"":STDERR=e)
надо:
Код: plaintext
:command="mumps "_file_"":STDERR=e)
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334960
gluconat_ca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёлы палы,из-за копи паста остались ещё лишние закорючки:
Код: plaintext
1.
2.
3.
4.
:command="mumps "_file_"":STDERR=e)

в итоге:

:command="mumps "_file:STDERR=e)
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334967
gluconat_ca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu,
надо бы ещё перед close p поставить use io если уж приближаться к идеальному рабочему коду :)
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334970
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gluconat_ca,
Первоначально примерно так и было.
Думал так будет правильнее.
Я как делаю.
С начало сохраняю как простой текст в файле. (.m)
Потом само компилирование и запись в object файле (.o)
Хотя команда DO предполагает компилирование(выше указал)
думаю , что ZLINK должен быть в любом случае, а старый файл (.о) удалить.
Во всяком случае вопрос как бы уже отработан. Остались нюансы.
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39334978
gluconat_ca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu,
В любом случае ненужные переключения между устройствами надо бы убрать, вне зависимости от использования или не использования этого кода в 'продакшене'.
Код: plaintext
1.
f  u e   r tstderr  q:$zeof   u io  s out=out_tstderr
f  u p   r terr  q:$zeof   u io  s local=local_terr
подчищая останется:
Код: plaintext
1.
2.
3.
4.
u e
f  r tstderr  q:$zeof   s out=out_tstderr
u p
f   r terr  q:$zeof   s local=local_terr
u io
Вот, кстати, чем иногда плох копи-паст кода - может остаться после правки лишнее, что было необходимым в исходном месте.
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39335004
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gluconat_ca,
Да. Спасибо. Согласен.
Еще предстоит мне пробовать словить ошибку
при использованием команде ZWRITE.
Вроде как бы понятно, но там есть нюансик.
При выборе в команде маску для глобала и если
она без ошибок, тогда все ОК.
Например: zwr ^glob(,8924,*)
Если ошибка при выборе например zwr ^glob(,8924*) (просто забыли запятую),
тогда приложение зависает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
GETT 
 s in=""
 w "VAR***"_var 
 ;   set p="something" o p:(command="cat")::"PIPE"
 ;   u p
 ;   ; NOW ZWRITE and ZWRITE what You want
 ;   w $$ENCODE^FCGIJSON(var)
 ;   ; Now leave Code as it is!!!!
 ;   u p w /EOF s %fcgi("o","stdout")=""
 ;   u p f i=1:1 r in q:$ZEOF  s %fcgi("o","stdout")=%fcgi("o","stdout")_in_$C(10)
 ;   u 0 c p zwr  w $L(%fcgi("o","stdout")),!
 ;   q  ;
 ; ***************
 s in=""
 s p="Files"
 s e="Errors"
 o p:(command="cat 2>/tmp/zwr.err":stderr=e)::"pipe"
 ;o p:(command="cat":stderr=e)::"pipe"
 u p
 ;u e
 x "zwr "_var
 w /eof
 f i=0:1 r record q:$zeof  d
 . s in=in_record_$C(13,10)
 s %fcgi("o","stdout")=in
 s %fcgi("o","header","Content-Type")="text/plain"
 ;c e
 c p 
 q  ;
Можно конечно по глобалу пройтись $Q, но тогда нельзя использовать уже стандарт, что предполагается командой zwr:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
GET ;
 s in="",Ret="" 
 s nod="",in=""
 f i=1:1:1000 s var=$Q(@var) q:var=""  d
 . s nod(i)=var_"="_@var
 s n=-1
 s ind="" f i=0:1 s ind=$o(nod(ind)) q:ind=""  d
 . s n=n+1 s dummy(n)=nod(ind)
 . s in=in_dummy(n)_$c(13,10)
 s %fcgi("o","stdout")=in
 s %fcgi("o","header","Content-Type")="text/plain"
 q
 ;
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39335008
gluconat_ca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriugluconat_ca,
Хотя команда DO предполагает компилирование(выше указал)
думаю , что ZLINK должен быть в любом случае, а старый файл (.о) удалить.
Во всяком случае вопрос как бы уже отработан. Остались нюансы.

Если задача стоит в выявлении ошибок компиляции программы, для этого нужно использовать вызов mumps с нужными ключами.

ZLINK подключает (прилинковывает) к текущему M-процессу новую или модифицированную программу, автоматически компилируя её. Так что он нужен больше тогда когда нужно что-то менять во время работы.

Я понял так, что речь больше шла о проверке на компилируемость без ошибок. Вторая цель требует тщательного изучения документации, тем более что в последн(-ей,-их) верси(-и,-ях) gt.m есть нововведения по этой части.
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39335023
gluconat_ca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu,
А почему бы не использовать предварительную проверку аргумента ZWRITE на 'валидность' ?
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39335034
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gluconat_ca,
Это тоже вариант, но уже сложнее мне кажется...
Во всяком случае посмотрю и этот.
Спасибо.
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39339633
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги Valeriu, gluconat_ca, и другие читающие этот форум, но скромно молчащие о своём интересе к M[UMPS]-системам. Есть предложения, которые, возможно, вас заинтересуют. Киньте сообщение на почту в профиле; обещаю ответить каждому.
...
Рейтинг: 0 / 0
[gt.m] Команда Xecute
    #39339766
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,
Отправил !
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / [gt.m] Команда Xecute
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]