Я не знаю, слишком ли это широко или нет, но я молодой программист, все еще учусь в колледже, это мой младший год. Я чувствую, что у меня есть довольно хорошие навыки для разных языков и довольно хорошая база. Но я спотыкаюсь, что если, например, я пытаюсь создать программу и говорю, что написал одну часть на python, потому что она проста и выполняет свою работу, но эта программа должна получить вывод из другой программы, которую я написал. в C, и я использую C из-за его скорости. Я не уверен, как заставить две разные программы и языки взаимодействовать друг с другом, чтобы создать общую единую программу. Я думаю о том, что вы можете писать в файл, но что, если программы Python и C, имеющие доступ к файлу, мне нужно подумать о блокировках.
В большинстве случаев я делал это с помощью импорта файлов в программу, но в этом случае это один и тот же язык, так что это просто, я просто использую функцию импорта, но с двумя языками / программами, взаимодействующими для создания единого вывода, у меня возникают проблемы ,
Я думал об этом вопросе, потому что думал о том, чтобы погрузиться в создание некоторых базовых веб-приложений просто для изучения, но я понятия не имею, как сделать так, чтобы файл javascript был интерактивным с тем, что я написал на python или наоборот.
Я чувствую, что упускаю что-то очень простое здесь и просто не понимаю. Извините, если этот вопрос слишком широкий, но я не смог найти четкого ответа в Интернете, я пытался просмотреть веб-приложение с открытым исходным кодом, но не смог получить от него ответ, еще раз извините, если вопрос кажется глупым, я подумал это хорошее место, чтобы спросить, я люблю читать на stackexchange.
Спасибо за любой ответ.
Ответы:
Код, написанный на разных языках, может взаимодействовать разными способами.
На уровне исходного кода кросс-компиляция из одного языка в другой может быть выполнена для некоторых комбинаций языков (например, GWT от Google включает компилятор java-to-javascript; компилятор Glasgow Haskell может компилироваться в C; ранние версии C ++ скомпилировано в C). Однако в большинстве случаев это неосуществимо.
Языки с общей виртуальной платформой, такие как среда выполнения JVM или .NET, обычно могут взаимодействовать через механизмы, предоставляемые платформой - например, все языки JVM могут обращаться к библиотекам Java и использовать их для связи друг с другом, а также могут вызывать методы и использовать классы, созданные на любом другом языке JVM.
Многие языки программирования, в том числе Python, предлагают механизм взаимодействия с нативными библиотеками, обычно написанными на C. Используя такой механизм, можно вызывать нативные функции из другого, более высокого уровня языка. В популярных библиотеках часто имеются привязки. Этот метод обычно упоминается как «Интерфейс внешней функции» . Интерфейс Python- in -C - это CFFI .
Другой вариант - создать две совершенно разные программы и заставить их взаимодействовать во время выполнения. Существуют различные механизмы для достижения этого; самый простой - через канал (загляните в
subprocess
модуль для python): в основном, одна программа вызывает другую, отправляя входные данные в свой стандартный ввод и считывая результат обратно из своего стандартного вывода. Это делает одну программу подпроцессом другой; если вам нужно, чтобы они были долгоживущими и запускались независимо, данные можно передавать туда и обратно через именованные каналы, (локальные) сетевые сокеты, общие файлы и (в зависимости от платформы) другими способами. Какой из них лучше, зависит.источник
Есть несколько различных хорошо зарекомендовавших себя способов общения двух программ. Вы уже определили одну очевидную проблему, поделившись файлами, и одну очевидную трудность с этим Но есть и другие способы.
Большинство современных операционных систем содержат механизм, называемый именованными каналами , который в основном представляет собой поток данных с входным концом в одной программе и выходным концом в другой программе. Если вам нужно отправить данные из одной программы в другую, запущенную на том же компьютере, это может быть хорошим методом для использования.
Если вам нужно настроить API для одной программы, чтобы использовать ее для вызова другой программы, вы можете обратиться к RPC (удаленные вызовы процедур), который обычно поддерживается на уровне операционной системы.
Если вы хотите общаться между двумя программами на двух разных компьютерах, все становится сложнее. Тогда вам нужно работать с сетью и протоколами. Вам нужна одна из программ, чтобы иметь возможность открывать сокет и прослушивать входящие сообщения, декодировать их во внутренний вызов метода, обрабатывать их и возвращать ответ. Существует множество библиотек, предоставляющих эту функциональность на разных языках, включая C и Python.
По сути, какой метод вы должны использовать, зависит от специфики того, что вы пытаетесь сделать. Проведите исследование различных форм межпроцессного взаимодействия и обмена сетевыми сообщениями, и вы сможете определить, что лучше всего соответствует вашим потребностям.
источник
Передача сообщений , по-видимому, является общей концепцией здесь, поскольку существуют различные примеры, когда можно взаимодействовать с разными языками, например, можно использовать классический ASP с COM-компонентами и немного JavaScript, чтобы получить смесь из 3 разных языков, используемых в одном приложении.
В приведенном вами примере разве блокировки не будут чем-то, что операционная система будет обрабатывать в файловой системе? Каждая программа не знает, о другой обязательно помните.
источник
Большинство компонентов программного обеспечения не должны взаимодействовать в терминах инструкций, а должны отправлять и получать данные: взаимодействовать с базой данных, отправлять / получать запросы JSON / XML и т. Д.
источник
В зависимости от типа проблемы может быть достаточно стандартного использования каналов в оболочке (введите в своей оболочке):
программа1 | program2
Таким образом, выход программы 1 поступает непосредственно на вход программы 2. Конечно, это не работает для каждой проблемы, но многие (неинтерактивные) проблемы могут быть успешно решены с помощью этого подхода.
источник