Вызов скрипта на python из php с передачей произвольных данных

Редко,  но бывает необходимо из скрипта на PHP, вызвать на исполнение скрипт на python с передачей неких параметров и данных.

Мне например понадобилось потому что основной код у меня на PHP,  а вот часть которая отвечает за взаимодействие с онлайн кассой Атол — на python, и переписывать эту часть на PHP нет возможности (без большого гемороя) —  заголовки драйвера Атола под Linux есть только на python (dto9fptr.py и dto9base.py — поставляются в комплекте с драйвером).

Ниже приведен один из способов:

PHP:

Python:

Т.е. что мы сделали?

  1. В скрипте на PHP сформировали json строку с параметрами и закодировали её в base64
  2. Вызвали python скрипт с аргументом в кодированной строки
  3. Python скрипт соответственно обратно декодирует и обрабатывает json

Профит.

Вложенный в письмо файл winmail.dat

Иногда попадаются письма, которые не удается распарсить средствами модуля imap на php — вложения он упорно видит одним файлом winmail.dat . Это «подарок» от Microsoft Outlook, который когда пользователь выбирает тип письма RTF, не заморачиваясь завертывает в файл winmail.dat и письмо, и вложения и с письмом помимо заголовков отправляет только это вложение. А люди — которые не пользуются Outlook — по мнению Microsoft — это ваши проблемы 😉

Решение — использование консольной утилиты tnef. Например:

 

Загрузка изображений в справочник номенклатуры из csv файла Розница 2.2

Задача: загрузить в справочник номенклатуры изображения, ссылки на которые находятся в файле csv.

Решение: пишем универсальный загрузчик изображений из csv. Изображения могут располагаться как в папке на жестком диске, так и в сети.

1) Выбираем разделитель  csv, стартовую строку (например первую строчку — обычно это названия колонок, нужно пропустить)

krana-ot-2018-05-16-17-02-27.png»>krana-ot-2018-05-16-17-04-37.png»>здесь

» Читать далее

Программное присоединение изображения к номенклатуре. 1С Розница 2.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ИмяВременногоФайла="c:\temp\minion.jpg";                        
    ном=Справочники.Номенклатура.НайтиПоКоду("1536       ");            
                                    
ПараметрыФайла=Новый Структура;
ПараметрыФайла.Вставить("Автор",Пользователи.НайтиПоИмени("Администратор"));
ПараметрыФайла.Вставить("ВладелецФайлов",ном.Ссылка);
ПараметрыФайла.Вставить("ИмяБезРасширения","бла-бла-3");
ПараметрыФайла.Вставить("РасширениеБезТочки","jpg");
ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное",ТекущаяУниверсальнаяДата());
ДвоичДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичДанные);
фс=ПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл(ПараметрыФайла,АдресВременногоХранилищаФайла,,,);
об=ном.ПолучитьОбъект();
об.ФайлКартинки= фс;
об.Записать();