Size: a a a

1С, БСП, DevOps и Архитектура

2020 May 11

АМ

Александр Морозов... in 1С, БСП, DevOps и Архитектура
ZEEGIN
еще можно прикольно делать пакетный режим запуская конфиоуратор в режиме агента и тогда в консоль можно будет прогресс выводить пример тут https://github.com/zeegin/1c-ssh-agent-sample
На эту натыкался когда искал.
источник

АМ

Александр Морозов... in 1С, БСП, DevOps и Архитектура
Эту не стал даже смотреть, так как не развивается большими буквами.
источник

AO

Andrey Ovsiankin in 1С, БСП, DevOps и Архитектура
Александр Морозов
Эту не стал даже смотреть, так как не развивается большими буквами.
@vbondarevsky а у гидры если есть old, то наверное есть и new?
источник

OT

Oleg Tymko in 1С, БСП, DevOps и Архитектура
Вот ещё реализацию нашёл: https://github.com/vakulenkoalex/runner1c
источник

АМ

Александр Морозов... in 1С, БСП, DevOps и Архитектура
ZEEGIN
Тут сразу две проблемы:

1. subprocess.run в режиме шела не умеет удалять дерево процессов при срубании по таймаут и это значит что процессы 1с останутся в памяти если ответ не будет получен за ожидаемое время

2. кодировка консоли может быть любой, причем с очень большой вероятностью для раннеров джеекинса или гитлаба ее переключат в 65001

Добрый день, по проблеме закрытия процессов при выходе по таймауту не нашел описания такого поведения. В
докуметации по методу run (https://docs.python.org/3.6/library/subprocess.html#subprocess.run):

*The timeout argument is passed to Popen.communicate(). If the timeout expires, the child process will be killed and waited for. The TimeoutExpired exception will be re-raised after the child process has terminated.*

Про аргумент shell (https://docs.python.org/3.6/library/subprocess.html#frequently-used-arguments):

*If shell is True, the specified command will be executed through the shell. This can be useful if you are using Python primarily for the enhanced control flow it offers over most system shells and still want convenient access to other shell features such as shell pipes, filename wildcards, environment variable expansion, and expansion of ~ to a user’s home directory. However, note that Python itself offers implementations of many shell-like features (in particular, glob, fnmatch, os.walk(), os.path.expandvars(), os.path.expanduser(), and shutil).*

В коде Popen._execute_child() (https://github.com/python/cpython/blob/69cdeeb93e0830004a495ed854022425b93b3f3e/Lib/subprocess.py#1002) флаг shell влияет только на опции вывода окна консоли и добавление первым аргументом cmd/exe /c:

   
if shell:
       startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
       startupinfo.wShowWindow = _winapi.SW_HIDE
       comspec = os.environ.get("COMSPEC", "cmd.exe")
       args = '{} /c "{}"'.format (comspec, args)
В описании Popen.communicate() (https://docs.python.org/3.6/library/subprocess.html#subprocess.Popen.communicate) есть предупреждение:

*The child process is not killed if the timeout expires, so in order to cleanup properly a well-behaved application should kill the child process and finish communication.*

Но в коде метода run ((https://github.com/python/cpython/blob/69cdeeb93e0830004a495ed854022425b93b3f3e/Lib/subprocess.py#L392)) этот момент разруливается:

   
with Popen(*popenargs, **kwargs) as process:
       try:
           stdout, stderr = process.communicate(input, timeout=timeout)
       except TimeoutExpired:
           process.kill()
           stdout, stderr = process.communicate()
           raise TimeoutExpired(process.args, timeout, output=stdout,
                                   stderr=stderr)
       except:
           process.kill()
           process.wait()
           raise
       retcode = process.poll()
       if check and retcode:
           raise CalledProcessError(retcode, process.args,
                                       output=stdout, stderr=stderr)
Может вы подскажете где почитать описанную вами проблему о зависании процессов, срубленных по таймауту?
источник

АМ

Александр Морозов... in 1С, БСП, DevOps и Архитектура
Oleg Tymko
Вот ещё реализацию нашёл: https://github.com/vakulenkoalex/runner1c
Эту не видел(
источник

VB

Vladimir Bondarevski... in 1С, БСП, DevOps и Архитектура
Andrey Ovsiankin
@vbondarevsky а у гидры если есть old, то наверное есть и new?
Есть, но там уже не питон. Ну и потребность в ней у меня отпала раньше, чем я успел сделать что-то значимое.
источник

VB

Vladimir Bondarevski... in 1С, БСП, DevOps и Архитектура
Александр Морозов
Эту не стал даже смотреть, так как не развивается большими буквами.
Не развивается, но это не значит, что там нечего подсмотреть. Например, кроссплатформенный запуск процессов без привязки к конкретной кодировке
https://github.com/vbondarevsky/old_hydra_agent/blob/6a0b79ed0a90769e0115c05eebc67a94c6a1059a/hydra_agent/utils/system.py#L41
источник

АМ

Александр Морозов... in 1С, БСП, DevOps и Архитектура
Vladimir Bondarevskiy
Не развивается, но это не значит, что там нечего подсмотреть. Например, кроссплатформенный запуск процессов без привязки к конкретной кодировке
https://github.com/vbondarevsky/old_hydra_agent/blob/6a0b79ed0a90769e0115c05eebc67a94c6a1059a/hydra_agent/utils/system.py#L41
Спасибо, посмотрю.
источник

AD

Abramov Dmitry in 1С, БСП, DevOps и Архитектура
Коллеги, добрый день.
Можно ли открыть форму из другой формы независимо, но в отдельном окне, который можно вывести на второй монитор?
источник

Z

ZEEGIN in 1С, БСП, DevOps и Архитектура
Александр Морозов

Добрый день, по проблеме закрытия процессов при выходе по таймауту не нашел описания такого поведения. В
докуметации по методу run (https://docs.python.org/3.6/library/subprocess.html#subprocess.run):

*The timeout argument is passed to Popen.communicate(). If the timeout expires, the child process will be killed and waited for. The TimeoutExpired exception will be re-raised after the child process has terminated.*

Про аргумент shell (https://docs.python.org/3.6/library/subprocess.html#frequently-used-arguments):

*If shell is True, the specified command will be executed through the shell. This can be useful if you are using Python primarily for the enhanced control flow it offers over most system shells and still want convenient access to other shell features such as shell pipes, filename wildcards, environment variable expansion, and expansion of ~ to a user’s home directory. However, note that Python itself offers implementations of many shell-like features (in particular, glob, fnmatch, os.walk(), os.path.expandvars(), os.path.expanduser(), and shutil).*

В коде Popen._execute_child() (https://github.com/python/cpython/blob/69cdeeb93e0830004a495ed854022425b93b3f3e/Lib/subprocess.py#1002) флаг shell влияет только на опции вывода окна консоли и добавление первым аргументом cmd/exe /c:

   
if shell:
       startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
       startupinfo.wShowWindow = _winapi.SW_HIDE
       comspec = os.environ.get("COMSPEC", "cmd.exe")
       args = '{} /c "{}"'.format (comspec, args)
В описании Popen.communicate() (https://docs.python.org/3.6/library/subprocess.html#subprocess.Popen.communicate) есть предупреждение:

*The child process is not killed if the timeout expires, so in order to cleanup properly a well-behaved application should kill the child process and finish communication.*

Но в коде метода run ((https://github.com/python/cpython/blob/69cdeeb93e0830004a495ed854022425b93b3f3e/Lib/subprocess.py#L392)) этот момент разруливается:

   
with Popen(*popenargs, **kwargs) as process:
       try:
           stdout, stderr = process.communicate(input, timeout=timeout)
       except TimeoutExpired:
           process.kill()
           stdout, stderr = process.communicate()
           raise TimeoutExpired(process.args, timeout, output=stdout,
                                   stderr=stderr)
       except:
           process.kill()
           process.wait()
           raise
       retcode = process.poll()
       if check and retcode:
           raise CalledProcessError(retcode, process.args,
                                       output=stdout, stderr=stderr)
Может вы подскажете где почитать описанную вами проблему о зависании процессов, срубленных по таймауту?
Его и нет в описании. Это типо такая особенность режима при флаге что это cmd
источник

Z

ZEEGIN in 1С, БСП, DevOps и Архитектура
потому что subprocess по разному работает в режиме эмуляции консоли и режиме запуска конкретного exe
источник

Z

ZEEGIN in 1С, БСП, DevOps и Архитектура
если ты запускаешь конкретный ехе то дерево рубится норм а если через эмулятор то не рубится. чтобы это понять надо ковырять исходники библиотки ну илм эксперимменты на запуске проводить
источник

Z

ZEEGIN in 1С, БСП, DevOps и Архитектура
потому кстати в гидре от @vbondarevsky вместо эмуляции консоли и вычисляется  путь к ехе файлу ;)
источник

АМ

Александр Морозов... in 1С, БСП, DevOps и Архитектура
М... В режиме shell запуск не отличается, такой же запуск exe, только exe является cmd.exe, которому передаются параметром команда. Возможно конечно особенности работы самого cmd.exe, но как-то уж совсем страшно получается в таком случае
источник

АМ

Александр Морозов... in 1С, БСП, DevOps и Архитектура
ZEEGIN
потому кстати в гидре от @vbondarevsky вместо эмуляции консоли и вычисляется  путь к ехе файлу ;)
На сколько я почитал, там путь к 1с исполняемому файлу просто параметрами запуска задаётся, но возможно не увидел где-то вычисление, просто как раз его реализацию искал там сегодня.
источник

AO

Andrey Ovsiankin in 1С, БСП, DevOps и Архитектура
Vladimir Bondarevskiy
Есть, но там уже не питон. Ну и потребность в ней у меня отпала раньше, чем я успел сделать что-то значимое.
Прям как у меня с одминусом
источник

VN

Vladimir Nadulich in 1С, БСП, DevOps и Архитектура
Коллеги, снова про новый РЛС вопрос (запись при обмене).
(обновление на последний релиз ЕРП не помогло)
1. Записываем нового партнера в режиме обмена.
2. Записываем нового контрагента или, например, контактное лицо партнера, связанного с новым партнером (не важно в каком режиме)
Пользователь с ограничением по группе партнеров не будет видеть контрагента или КЛ, пока у партнера не изменить группу доступа (туда-обратно) или пройтись обработкой обновления вспомогательных данных.
Простые пересчеты отдельных ключей или ключей всей таблицы не помогают.
Собственно вопрос: как правильно писать партнеров в базу, чтобы "ограниченные права" сразу увидели данные?
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Vladimir Nadulich
Коллеги, снова про новый РЛС вопрос (запись при обмене).
(обновление на последний релиз ЕРП не помогло)
1. Записываем нового партнера в режиме обмена.
2. Записываем нового контрагента или, например, контактное лицо партнера, связанного с новым партнером (не важно в каком режиме)
Пользователь с ограничением по группе партнеров не будет видеть контрагента или КЛ, пока у партнера не изменить группу доступа (туда-обратно) или пройтись обработкой обновления вспомогательных данных.
Простые пересчеты отдельных ключей или ключей всей таблицы не помогают.
Собственно вопрос: как правильно писать партнеров в базу, чтобы "ограниченные права" сразу увидели данные?
Отладка гарантированно даст ответ
источник

VN

Vladimir Nadulich in 1С, БСП, DevOps и Архитектура
John Doe
Отладка гарантированно даст ответ
Ох, там те еще дебри (((
источник