Как можно передавать данные из одной программы в другую?
Есть программа работающая на одном компе и на другом. Оба компа подсоедeнины к Интернетy. Как можно передавать данные (strings, ints. ) из одной в другую? python P.S. Не шарю в Интернет технологиях к сожалению.
Отслеживать
задан 2 июн 2020 в 15:22
USERNAME GOES HERE USERNAME GOES HERE
10.4k 21 21 золотой знак 25 25 серебряных знаков 53 53 бронзовых знака
Самое простое, наверное — поднять веб-сервер на Flask на одном компе и ходить обычным http на этот сервер с другого компа. Но нужно знать ip адрес и чтобы он был виден из интернета.
2 июн 2020 в 15:26
@CrazyElf Я уже думал сделать нечто похожее (даже есть код на bottle). Но по-моему это городить огород. Или это правильный путь?
2 июн 2020 в 15:28
Ну, совсем правильно делать, наверное, на сокетах, но с веб-сервисом гораздо проще будет отлаживаться, я думаю. http запросы к сервису можно хоть в браузере писать, и на сервисе их просто логировать.
2 июн 2020 в 15:45
@CrazyElf Я думал я одинок с такими мыслями.
2 июн 2020 в 15:46
@CrazyElf спс !
2 июн 2020 в 15:47
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
- python
- python-3.x
- http
- tcp
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как передать данные из одной программы в другую
← →
IceBeerg © ( 2006-07-19 13:48 ) [0]
Есть две программы, первая запущена. Вторая при запуске опрделяет наличие первой, проделывает некотрую работу и пытается передать данные посредством сообщений windows. Так вот первая программа сообщение получает, адрес указателя получает, но данных по этому адресу нет.
Отсылаю данные:
.
wnd:=FindWindow(«TTestOpenForm»,»TestOpenForm»);
If wnd<>0 Then
Begin
WParam:=Pointer(GlobalAlloc(GPTR,SizeOf(DataBuf)));//DataBuf:String
WParam^:=DataBuf;//WParam:^String
PostMessage(wnd,wm_Data,Integer(@WParam),0);//const wm_Data=wm_User+256
Halt;
End;
.
Пытаюсь получить данные (в перекрытом onMessage):
.
If Msg.message=wm_Data Then
Begin
PWParm:=Ptr(Msg.wParam);//PWParm:^String
Data:=PWParm^;//Data:String
.
End;
.
как все таки передать из программы в программу строку?
← →
Virgo_Style © ( 2006-07-19 13:51 ) [1]
Если через сообщения — SendMessage WM_CopyData ?
← →
Ega23 © ( 2006-07-19 13:51 ) [2]
Ха! Адресные пространства у процессов-то разные.
← →
IceBeerg © ( 2006-07-19 13:58 ) [3]
> Ega23 © (19.07.06 13:51) [2]
А чем тогда разместить данные в общей куче? И потом их заиспользовать и убрать?
← →
IceBeerg © ( 2006-07-19 14:02 ) [4]
Первая программа через SendMessage сообщения НЕ получает 🙁 и спользую PostMessage , а WM_COPYDATA c PostMessage не работает 🙁
An application must use the SendMessage function to send this message, not the PostMessage function.
← →
medved_68 © ( 2006-07-19 14:12 ) [5]
> А чем тогда разместить данные в общей куче?
Боюсь что сие невозможно.
> Первая программа через SendMessage сообщения НЕ получает
Почему. Если правильно найден дискриптор окна сообщение ДОЛЖНО ПРИЙТИ. Ищи ошибку в перекрытии WndProg окна кому посылаешь сообщение.
З.Ы. Если SendMessage не работает то и PostMessage не будет работать.
← →
Юрий Зотов © ( 2006-07-19 14:15 ) [6]
> IceBeerg © (19.07.06 13:58) [3]
См. CreateFileMapping. Но с WM_COPYDATA получится проще.
> IceBeerg © (19.07.06 14:02) [4]
> Первая программа через SendMessage сообщения НЕ получает
Почему? Должна получать. WM_COPYDATA для того и существует. Оно же работает? Работает.
← →
medved_68 © ( 2006-07-19 14:18 ) [7]
> 2Юрий Зотов
А с Pipe каналом можно провернуть сие.
← →
Юрий Зотов © ( 2006-07-19 14:21 ) [8]
Чтобы не повторять уже обсуждавшееся:
http://delphimaster.net/view/1-1152681599/
← →
medved_68 © ( 2006-07-19 14:42 ) [9]
> Юрий Зотов
Спасибо
← →
IceBeerg © ( 2006-07-19 15:10 ) [10]
> З.Ы. Если SendMessage не работает то и PostMessage не будет
> работать.
А вот так вот получается. сначала и пробовал через SendMessage, никак, а птом заменил на PostMessage и за работало! Тогда как раз проверял факт получения первым приложением сообщения от втрого.
2 Юрий Зотов
Спсибо.
И вообще, всем спасибо, буду рыться дальше.
← →
Amoeba © ( 2006-07-19 16:29 ) [11]
Выслал готовую демку. Может пригодится.
← →
Amoeba © ( 2006-07-19 16:31 ) [12]
К сожалению, почта не прошла.
(mail.newmail.ru: 553 84.204.46.4 temporary blacklisted, contact noc@pochta.ru (84.204.46.4))
← →
Ketmar © ( 2006-07-19 16:45 ) [13]
>IceBeerg © (19.07.06 15:10) [10]
быстро забыть обо всём остальном и искать баг в своём коде.
Перенаправление ввода/вывода в Linux
Разбираемся, зачем нужно перенаправление потоков и как оно позволяет лучше работать с bash-скриптами.
Эта инструкция — часть курса «Linux: горячие клавиши и команды».
Смотреть весь курс
Введение
Стандартные потоки ввода и вывода в Linux являются одним из наиболее распространенных средств для обмена информацией процессов, а перенаправление >, >> и | является одной из самых популярных конструкций командного интерпретатора.
В данной статье мы ознакомимся с возможностями перенаправления потоков ввода/вывода, используемых при работе файлами и командами.
Требования
- Linux-система, например, Ubuntu 20.04
Потоки
Стандартный ввод при работе пользователя в терминале передается через клавиатуру.
Стандартный вывод и стандартная ошибка отображаются на дисплее терминала пользователя в виде текста.
Ввод и вывод распределяется между тремя стандартными потоками:
- stdin — стандартный ввод (клавиатура),
- stdout — стандартный вывод (экран),
- stderr — стандартная ошибка (вывод ошибок на экран).
Потоки также пронумерованы:
- stdin — 0,
- stdout — 1,
- stderr — 2.
Из стандартного ввода команда может только считывать данные, а два других потока могут использоваться только для записи. Данные выводятся на экран и считываются с клавиатуры, так как стандартные потоки по умолчанию ассоциированы с терминалом пользователя. Потоки можно подключать к чему угодно: к файлам, программам и даже устройствам. В командном интерпретаторе bash такая операция называется перенаправлением:
- < file— использовать файл как источник данных для стандартного потока ввода.
- > file — направить стандартный поток вывода в файл. Если файл не существует, он будет создан, если существует — перезаписан сверху.
- 2> file — направить стандартный поток ошибок в файл. Если файл не существует, он будет создан, если существует — перезаписан сверху.
- >>file — направить стандартный поток вывода в файл. Если файл не существует, он будет создан, если существует — данные будут дописаны к нему в конец.
- 2>>file — направить стандартный поток ошибок в файл. Если файл не существует, он будет создан, если существует — данные будут дописаны к нему в конец.
- &>file или >&file — направить стандартный поток вывода и стандартный поток ошибок в файл. Другая форма записи: >file 2>&1.
Стандартный ввод
Стандартный входной поток обычно переносит данные от пользователя к программе. Программы, которые предполагают стандартный ввод, обычно получают входные данные от устройства типа клавиатура. Стандартный ввод прекращается по достижении EOF (конец файла), который указывает на то, что данных для чтения больше нет.
EOF вводится нажатием сочетания клавиш Ctrl+D.
Рассмотрим работу со стандартным выводом на примере команды cat (от CONCATENATE, в переводе «связать» или «объединить что-то»).
Cat обычно используется для объединения содержимого двух файлов.
Cat отправляет полученные входные данные на дисплей терминала в качестве стандартного вывода и останавливается после того как получает EOF.
Пример
В открывшейся строке введите, например, 1 и нажмите клавишу Enter. На дисплей выводится 1. Введите a и нажмите клавишу Enter. На дисплей выводится a.
Дисплей терминала выглядит следующим образом:
test@111:~/stream$ cat 1 1 a a
Для завершения ввода данных следует нажать сочетание клавиш Ctrl + D.
Стандартный вывод
Стандартный вывод записывает данные, сгенерированные программой. Когда стандартный выходной поток не перенаправляется в какой-либо файл, он выводит текст на дисплей терминала.
При использовании без каких-либо дополнительных опций, команда echo выводит на экран любой аргумент, который передается ему в командной строке:
echo Пример
Аргументом является то, что получено программой, в результате на дисплей терминала будет выведено:
Пример
При выполнении echo без каких-либо аргументов, возвращается пустая строка.
Пример
Команда объединяет три файла: file1, file2 и file3 в один файл bigfile:
cat file1 file1 file1 > bigfile
Команда cat по очереди выводит содержимое файлов, перечисленных в качестве параметров на стандартный поток вывода. Стандартный поток вывода перенаправлен в файл bigfile.
Стандартная ошибка
Стандартная ошибка записывает ошибки, возникающие в ходе исполнения программы. Как и в случае стандартного вывода, по умолчанию этот поток выводится на терминал дисплея.
Пример
Рассмотрим пример стандартной ошибки с помощью команды ls, которая выводит список содержимого каталогов.
При запуске без аргументов ls выводит содержимое в пределах текущего каталога.
Введем команду ls с каталогом % в качестве аргумента:
В результате должно выводиться содержимое соответствующей папки. Но так как каталога % не существует, на дисплей терминала будет выведен следующий текст стандартной ошибки:
ls: cannot access %: No such file or directory
Перенаправление потока
Linux включает в себя команды перенаправления для каждого потока.
Пример
В приведенном примере команда cat используется для записи в файл file1, который создается в результате цикла:
cat > file1 a b c
Для завершения цикла нажмите сочетание клавиш Ctrl + D.
Если файла file1 не существует, то в текущем каталоге создается новый файл с таким именем.
Для просмотра содержимого файла file1 введите команду:
cat file1
В результате на дисплей терминала должно быть выведено следующее:
a b c
Для перезаписи содержимого файла введите следующее:
cat > file1 1 2 3
Для завершения цикла нажмите сочетание клавиш Ctrl + D.
В результате на дисплей терминала должно быть выведено следующее:
1 2 3
Предыдущего текста в текущем файле больше не существует, так как содержимое файла было переписано командой >.
Для добавления нового текста к уже существующему в файле с помощью двойных скобок >> выполните команду:
cat >> file1 a b c
Для завершения цикла нажмите сочетание клавиш Ctrl + D.
Откройте file1 снова и в результате на дисплее монитора должно быть отражено следующее:
1 2 3 a b c
Каналы
Каналы используются для перенаправления потока из одной программы в другую. Стандартный вывод данных после выполнения одной команды перенаправляется в другую через канал. Данные первой программы, которые получает вторая программа, не будут отображаться. На дисплей терминала будут выведены только отфильтрованные данные, возвращаемые второй командой.
Пример
ls | less
В результате каждый файл текущего каталога будет размещен на новой строке:
file1 file2 t1 t2
Перенаправлять данные с помощью каналов можно как из одной команды в другую, так и из одного файла к другому, а перенаправление с помощью > и >> возможно только для перенаправления данных в файлах.
Пример
Для сохранения имен файлов, содержащих строку «LOG», используется следующая команда:
dir /catalog | find "LOG" > loglist
Вывод команды dir отсылается в команду-фильтр find. Имена файлов, содержащие строку «LOG», хранятся в файле loglist в виде списка (например, Config.log, Logdat.svd и Mylog.bat).
При использовании нескольких фильтров в одной команде рекомендуется разделять их с помощью знака канала |.
Фильтры
Фильтры представляют собой стандартные команды Linux, которые могут быть использованы без каналов:
- find — возвращает файлы с именами, которые соответствуют передаваемому аргументу.
- grep — возвращает только строки, содержащие (или не содержащие) заданное регулярное выражение.
- tee — перенаправляет стандартный ввод как стандартный вывод и один или несколько файлов.
- tr — находит и заменяет одну строку другой.
- wc — подсчитывает символы, линии и слова.
Как правило, все нижеприведенные команды работают как фильтры, если у них нет аргументов (опции могут быть):
- cat — считывает данные со стандартного потока ввода и передает их на стандартный поток вывода. Без опций работает как простой повторитель. С опциями может фильтровать пустые строки, нумеровать строки и делать другую подобную работу.
- head — показывает первые 10 строк (или другое заданное количество), считанных со стандартного потока ввода.
- tail — показывает последние 10 строк (или другое заданное количество), считанные со стандартного потока ввода. Важный частный случай tail -f, который в режиме слежения показывает концовку файла. Это используется, в частности, для просмотра файлов журнальных сообщений.
- cut — вырезает столбец (по символам или полям) из потока ввода и передает на поток вывода. В качестве разделителей полей могут использоваться любые символы.
- sort — сортирует данные в соответствии с какими-либо критериями, например, арифметически по второму столбцу.
- uniq — удаляет повторяющиеся строки. Или (с ключом -с) не просто удалить, а написать сколько таких строк было. Учитываются только подряд идущие одинаковые строки, поэтому часто данные сортируются перед тем как отправить их на вход программе.
- bc — вычисляет каждую отдельную строку потока и записывает вместо нее результат вычисления.
- hexdump — показывает шестнадцатеричное представление данных, поступающих на стандартный поток ввода.
- strings — выделяет и показывает в стандартном потоке (или файле) то, что напоминает строки. Всё что не похоже на строковые последовательности, игнорируется. Команда полезна в сочетании с grep для поиска интересующих строковых последовательностей в бинарных файлах.
- sed — обрабатывает текст в соответствии с заданным скриптом. Наиболее часто используется для замены текста в потоке: sed s/было/стало/g.
- awk — обрабатывает текст в соответствии с заданным скриптом. Как правило, используется для обработки текстовых таблиц, например, вывод ps aux и т.д.
- sh -s — текст, который передается на стандартный поток ввода sh -s. может интерпретироваться как последовательность команд shell. На выход передается результат их исполнения.
- ssh — средство удаленного доступа ssh, может работать как фильтр, который подхватывает данные, переданные ему на стандартный поток ввода, затем передает их на удаленный хост и подает на вход процессу программы, имя которой было передано ему в качестве аргумента. Результат выполнения программы (то есть то, что она выдала на стандартный поток вывода) передается со стандартного вывода ssh.
Если в качестве аргумента передается файл, команда-фильтр считывает данные из этого файла, а не со стандартного потока ввода (есть исключения, например, команда tr, обрабатывающая данные, поступающие исключительно через стандартный поток ввода).
Пример
Команда tee, как правило, используется для просмотра выводимого содержимого при одновременном сохранении его в файл.
wc ~/stream | tee file2
Пример
Допускается перенаправление нескольких потоков в один файл:
ls -z >> file3 2>&1
В результате сообщение о неверной опции «z» в команде ls будет записано в файл t2, поскольку stderr перенаправлен в файл.
Для просмотра содержимого файла file3 введите команду cat:
cat file3
В результате на дисплее терминала отобразиться следующее:
ls: invalid option -- 'z' Try 'ls --help' for more information.
Заключение
Мы рассмотрели возможности работы с перенаправлениями потоков >, >> и |, использование которых позволяет лучше работать с bash-скриптами.
Работа с файлами и каталогами в Linux
Как переносятся документы из одной программы 1С в другую?
Ситуация, когда возникает потребность в переносе из программы 1С в другую, довольно распространена. И очень важно разобраться с тем, как это делается технически. В том числе могут возникнуть потребность формировать аналитические отчёты, включая данные по старым периодам.
На самом деле перенос в отношении реквизитов и табличных частей происходит по данным. А вот движения не переносятся. И уже после окончания загрузки в базу данных 1С осуществляется проведение документов, у которых дата больше даты начальных остатков, выбранных при выгрузке, если эти документы в исходной базе проводились.
При осуществлении записи данных создаётся таблица всех документов. Алгоритм осуществляется после записи. Документы непременно нужно проводить в хронологическом порядке.
Что необходимо учитывать при переносе документов из одной версии 1С в другую?
В таких конфигурациях как 1С: ERP Управление предприятием, 1С: Управление торговлей (УТ), 1С: Комплексная автоматизация (КА) при проведении поставок и продаж на основании заказов крайне важно правильно подобрать код из записей регистра заказов (код номенклатуры). Это может быть проведение документа приобретения товаров и услуг или код строки из регистрации заказа поставщикам.
Почему заполнение данного кода имеет такое значение? Дело в том, что все строчки в реализации или же в поступлении при отсутствии заполнения будут восприниматься как строчки сверх заказа. Поэтому при проведении всё нужно разделить на 3 итерации. Первая — это проведение заказов клиентам и поставщикам, как уже и было сказано, в хронологическом порядке. Вторая итерация — остальные документы, за исключением счетов-фактур полученных и выданных. Третья — проведение счетов-фактур.
По каким причинам счета-фактуры будут проводиться позже? Дело в том, что их дата и время полностью совпадают в базах с соответствующими показателями документа основания. Так что при проведении в хронологическом порядке может получиться так, что счёт-фактура проводится раньше документа-основания. Следовательно, если не проводить основание, то счёт-фактура откажется проводиться. Следовательно, проведение счетов-фактур нужно делать в последнюю очередь.
Особенности перехода
В переносе данных из 1С: Управление производственным предприятием (УПП), или из 1С: Комплексная автоматизация (КА) в 1С: Бухгалтерия можно переносить и движения документов. Эта возможность экспериментальная. Стоит учесть, что её использование способно привести к проблемам, так как какие-то обязательные для бухгалтерии регистры могут и не заполнится. Но отличия по планам счетов приняты во внимание.
Процедура переноса из 1С: ERP Управление предприятием в 1С: Комплексная автоматизация (КА), или в 1С: Зарплата и управление персоналом (ЗУП)
Этот перенос происходит с копированием объектов как есть. Причём документы переносятся вместе с движением. Возможности указать даты начальных остатков отсутствуют, так как в этом просто нет смысла.
Стоит учесть и полную идентичность библиотеки Б3РК. Разница может быть разве что по версиям.
Выше описаны все исключения. В остальных ситуациях переносятся уже сами документы, заполняются поля. И после осуществляется проведение с теми правилами и условиями, которые были описаны выше.