Как связать две программы в питоне

Я делаю веб-проект, для этого у меня есть летние сценарии и сценарии сканирования, теперь я хочу связать оба этих двух сценария вместе, чтобы мои оба сценария работали автоматически для одного проекта.

Например: я использую PyCharm.

Если у меня есть один файл — Summery.Py, а второй файл — crawler.Py, у обоих есть отдельные модули. Я хочу связать их одной программой

Комментарии (3)

Связать их? что это значит ? Если вы хотели использовать функции из обоих файлов (скажем, функции), вы можете импортировать одну или другую из любого из файлов и использовать требуемую функциональность.

Просто используйте импорт как в третьем модуле Python, так и импортируйте один в другой. Вы не можете использовать import

у меня много функций

Zain noman Farooq

Zain noman Farooq

12.03.2019 00:24

Оператор pass в Python — это простая концепция, которую могут быстро освоить даже новички без опыта программирования.

Python — самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science.

Как запустить 2 цикла одновременно или же Многопоточность в Python | #Python #Программирование #Гайд

Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это

Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.

Ответы 2

Вы можете попробовать import сделать функции в одном скрипте вызываемыми в другом.

Например. Внутри crawler.py добавьте import Summery и вызовите функции в обычном режиме.

спасибо за этот быстрый ответ .. на самом деле у меня есть много функций в обоих файлах python, потому что оба являются двумя разными модулями моего проекта .. поэтому я не могу импортировать все функции .. тогда что мне делать?

Zain noman Farooq

Вы можете попробовать from Summery import [insert function name here], [another function], [another]

12.03.2019 00:27

Это обрабатывается с помощью import функциональных возможностей Python. Вы можете сделать что-то вроде:

from Summery import * # will run Summery.py and load all global variables and functions

Или используйте более подходящий

from Summery import myFunction # get just one function

Тоже работает в обе стороны

from crawler import * # you don’t include the ‘.py’

Если они находятся в разных каталогах, вы делаете

from MainPyCharmFolder.SubFolder.DeepFolder.Summery import myFunction

Что позволяет вам перемещаться по структуре папок

спасибо за этот быстрый ответ .. на самом деле у меня есть много функций в обоих файлах python, потому что оба являются двумя разными модулями моего проекта .. поэтому я не могу импортировать все функции .. тогда что мне делать?

Zain noman Farooq

Источник: reddeveloper.ru

Разбиваем проект на файлы

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Как правильно связать классы с разных файлов

#1 Апрель 15, 2021 17:08:36

Как правильно связать классы с разных файлов

Привет всем!
Сильно не пинайте, но я действительно не могу понять общий принцип.
Ранее на Autoit было просто — импортировал файл, и все с него можно использовать, а вот с python я теряюсь.
Но — к вопросу.
Итак, есть три файла с расширением py.
1. design.py — Дизайн, созданный и конвертированный из QTDesigner
2. main.py — собственно главный исполняющий файл, в который я и хочу все добавить.
Эти два файла между собой связаны и прекрасно работают. Это просто для показа связи

Читайте также:
Как перевести документ в электронный вид программа

import sys from PyQt5 import QtWidgets, QtGui, QtCore import design from PyQt5.QtWidgets import (QWidget, QLabel, QHBoxLayout, QVBoxLayout, QFrame) from PyQt5.QtGui import QColor from PyQt5.QtCore import QSize ##Главный класс class App(QtWidgets.QMainWindow, design.Ui_MainWindow): ## Инициализация окна и обработчики событий def __init__(self): # Это здесь нужно для доступа к переменным, методам # и т.д. в файле design.py super().__init__() self.setupUi(self) ————————

То есть в файле main.py у меня один класс, связанный чисто с обработкой функций окна
И третий файл — kod.py, в котором планируется основная логика ну и вывод конечного результата в окно
Подключаю его к main.py так:

from kod import Kod

Kod — это название класса в файле kod.py
В функции инициализации главного файла прописываю обработку функции с файла kod.py:

self.btn_Parce.clicked.connect(Kod.open_import_txt)

Там просто вывод сообщения в консоль, все нормально.
Но вот суть вопроса — как с файла kod.py обратиться к элементам окна (design.py и main.py). Да, в main.py есть дополнительно созданные элементы
Читал про инициализацию класса. Дальше этого в файле kod.py не прошел:

class Kod(): def __init__(self): super().__init__()
Пробовал еще по примеру с первого файла дописать это:
self.setupUi(self)

Получаю ошибку
Я так понял, эти строки вроде должны были позволить иметь связь с файлом интерфейса.
Как наладить эту пресловутую связь в обоих направлениях?
Чтобы я с одного файла обращался к функциям второго, а со второго — к элементам управления первого.
Спасибо за внимание

Отредактировано Novator (Апрель 16, 2021 07:48:06)

#2 Апрель 15, 2021 21:59:21

Как правильно связать классы с разных файлов

Novator
Итак, есть три файла с расширением py.
1. Design.py — Дизайн, созданный и конвертированный из QTDesigner
2. Main.py — собственно главный исполняющий файл, в который я и хочу все добавить.

Файлы называй всегда строчными буквами. С прописной буквы называются классы. Это соглашение из PEP8.

А то ты потом напишешь Kod.open_import_txt , например, и будет непонятно, это модуль Kod c функцией open_import_txt или это класс Kod с методом open_import_txt .
Так что соблюдай соглашение, чтобы другие по всему твоему коду не лазили и не искали, что такое Kod. Никто это делать не будет, просто выкинут твой код через пару таких поисков.

Если же ты решил сумничать и файлы, которые у тебя называются design.py и main.py , назвал с больших букв потому, что они начинают новое предложение в русском языке, то ты ещё хуже сделал. Мы как догадаемся, что у тебя файлы называются правильно? Так что пиши точно всё всегда, чтобы не тратить время на допольнительные расспросы.

Так что всё переименуй, всё переделай, отредактируй сообщение на форуме, а потом задавай свой вопрос. Потому что мне надоело по твоему коду лазить и думать “а как у него файлы называются?”.

Отредактировано py.user.next (Апрель 15, 2021 21:59:59)

#3 Апрель 16, 2021 07:50:20

Как правильно связать классы с разных файлов

py.user.next

Отредактировано Novator (Апрель 16, 2021 07:51:02)

#4 Апрель 16, 2021 09:15:34

Как правильно связать классы с разных файлов

Novator это у него нормальная манера ведения беседы, если не обращать внимание на эмоциональную часть, то зачастую он дает вполне дельные советы.

[code python][/code]
Бериегите свое и чужое время.

#5 Апрель 16, 2021 09:51:00

Как правильно связать классы с разных файлов

PEHDOM, я понимаю и смиренно склоняю голову…
Сам знаю, когда приходиться объяснять элементарные вещи и как это бесит.
Ну просто для меня этот вопрос пока не элементарный

#6 Апрель 16, 2021 10:31:30

Как правильно связать классы с разных файлов

Novator
Ну просто для меня этот вопрос пока не элементарный

Можете представить код так:любое имя переменной,функции или класса= названию адреса пространства в котором хранится какое-то значение или другое пространство.К примеру у вас есть квартира-это ваше пространство,а вы это пространство находящееся в этом пространстве.,хранящее значение в виде себя.Если я нахожусь рядом с вами в одной квартире,то могу передать вам письмо с информацией сразу в руки.просто обратившись к вам по имени,например Иван.Но если я нахожусь в другом городе,то чтобы передать вам письмо мне нужно точно знать ваш адрес.т.е.Город.Улица.Дом.Квартира.Иван.Конечно в программировании я не встречал столько вложенных пространств.,в коде будет обращение Класс.переменная.В итоге чтобы можно было обращаться из одного пространства в другое,нужно чтобы пространство знало адрес другого пространства.
Написав import my_lib ,теперь все будут знать адрес этого пространства,и будут обращаться через точку,к примеру my_lib.Class().variable.Если вы укажете не существующий адрес, то будет ошибка.Если не укажете import,то никто не узнает адреса пространства..Слишком мудрено конечно,но я представляю это так

Читайте также:
Как разработать программу семинара

Онлайн

#7 Апрель 16, 2021 10:32:17

Как правильно связать классы с разных файлов

Novator
Но вот суть вопроса — как с файла kod.py обратиться к элементам окна (design.py и main.py).

Из файла kod.py ты максимум можешь послать сигнал. Этот сигнал должен слушать класс приложения из файла main.py и реагировать на него, выполняя какое-то действие при его получении. Вся связь между частями в Qt-приложениях организуется через сигналы и слоты.

Модуль залазить в модуль не должен. Модуль на то и модуль, что он закрыт и независим от других модулей, не знает их содержимого, прячет своё содержимое от них и предоставляет лишь интерфейс наружу для взаимодействия с ним. Например, ты берёшь флешку, ты не знаешь что там у неё внутри, ты можешь только подключить её к компьютеру.

У компьютера есть интерфейс USB и у флешки есть интерфейс USB. Компьютер не знает, что там внутри у флешки, а флешка не знает, что там внутри у компьютера. Вот благодаря этому флешки можно подключать не только к компьютеру, а к компьютеру можно подключать не только флешки. Работает лишь интерфейс, по которому туда-сюда что-то передаётся. В этом и состоит модульность.

Такая же модульность у модулей питона.

Поэтому создай отдельный файл с интерфейсами. Там у тебя будет описан сигнал. Потом этот сигнал импортируешь в kod.py и в main.py и дальше в main.py ты в приложении App делаешь слот, который принимает этот сигнал и что-то делает при его получении. А в kod.py ты посылаешь этот сигнал через emit куда-то в общее пространство.

И вот так через общее пространство, где ходят все сигналы приложения, этот сигнал попадёт в слот и тот на него среагирует. Таким образом, у тебя модуль kod.py не будет знать про модуль main.py . Таким образом, у тебя модуль main.py не будет знать про модуль kod.py . А про содержимое друг у друга они не будут знать тем более. Они будут только через интерфейс общаться в виде этого сигнала или нескольких сигналов. А сигнал ты делаешь самодельный.

Отредактировано py.user.next (Апрель 16, 2021 10:35:02)

#8 Апрель 16, 2021 11:19:09

Как правильно связать классы с разных файлов

Из всего написанного я так понимаю, что к делу относятся только сигналы и слоты. Что ж, по этим словам и будем гуглить
Хотя смотрю, что проще или не делать вообще, или писать все в один файл и класс

py.user.next
Поэтому создай отдельный файл с интерфейсами. Там у тебя будет описан сигнал. Потом этот сигнал импортируешь в kod.py и в main.py и дальше в main.py ты в приложении App делаешь слот, который принимает этот сигнал и что-то делает при его получении. А в kod.py ты посылаешь этот сигнал через emit куда-то в общее пространство. И вот так через общее пространство, где ходят все сигналы приложения, этот сигнал попадёт в слот и тот на него среагирует.

А можно пару строк кода?

Читайте также:
Автором программы паутинка является

Отредактировано Novator (Апрель 16, 2021 11:43:22)

#9 Апрель 16, 2021 11:45:01

Как правильно связать классы с разных файлов

Novator
Хотя смотрю, что проще или не делать вообще, или писать все в один файл и класс

Вся связь между частями программы, использующей Qt, делается через сигналы и слоты.

Novator
Что ж, по этим словам и будем гуглить

Потому что не знаешь ты именно это. Соответственно, и в модуль из другого модуля ты лезешь потому, что вот этого всего не знаешь. Что там в Qt, неважно. Qt — это одна какая-то там библиотека. А эти понятия работают для всех библиотек во всех языках во все времена и так далее.

Это теория программирования.

Соответственно, ты разбиваешь программу на модули — ну, разбивай. Но это не значит, что эти модули должны друг в друга лазить. Это нарушение вот этих фундаментальных правил, которое вылезет в хорошо известных последствиях.

#10 Апрель 16, 2021 12:46:46

Как правильно связать классы с разных файлов

py.user.next, опять замечание на мои умственные возможности. С таким количеством сообщений конечно имеете право. Но право блеснуть знаниями, а не указывать на неграмотность других.
Если бы я знал ответы на все вопросы, меня бы тут и не было

Источник: python.su

Связь между программами python

Есть две программы написанные на python. Как из первой программы направить запрос во вторую? То есть условно говоря первая программа отправляет текст «Hello, world!», а вторая его получает и выводит на экран UPD 1: Я не имею в виду работу с библиотекой socket и ей подобными UPD 2: Обе программы запускаются на одном компьютере UPD 3: Я не имею ввиду работу с импортами

Отслеживать
Menlis Smith
задан 20 ноя 2022 в 21:25
Menlis Smith Menlis Smith
65 9 9 бронзовых знаков

Зависит от той программы, которая должна принять информацию. В ней должен быть явно написан код который откуда то получает данные. И если там такое предусмотрено, то надо посмотреть как именно она готова получать данные. Ответ на ваш вопрос невозможен без просмотра кода программ

20 ноя 2022 в 21:30

В любом уважающем себя интерпретаторе команд есть возможность перенаправить вывод одной программы в ввод другой программы python программа1.py | python программа2.py

20 ноя 2022 в 21:31
20 ноя 2022 в 21:32
21 ноя 2022 в 7:25

вот вам две программы, одна передаёт другой строку 12 , вторая преобразует строку в число, прибавляет единицу, и печатает результат: $ python3 -c ‘print(12)’ | python3 -c ‘x=int(input());print(x+1)’ . но это одностороннее общение. про двустороннее — ссылку на википедию привёл Mike.

6 дек 2022 в 22:19

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Под вопросом «Как сделать запрос во вторую программу?» я наверное понял, как вам из одной программы достать переменную/вызвать функцию из другой программы.

Я пишу код для примера, а автор вопроса уже сам адаптирует его под себя:

#main1.py def func(): int1 = 10 print(int1)
#main2.py from main1 import func func()

Есть несколько примечаний:

  1. Оба .py файла должны быть в одной папке (если они в разных папках, то нужно импортировать уже из папки так):

#C:Users[имя пользователя]Dekstoptestfoldermain1.py def func(): int1 = 10 print(int1)
#C:Users[имя пользователя]Desktopmain2.py from testfolder.main1 import func func()

  1. Нельзя делать так:

#main1.py from main2 import func2 def func1(): int1 = 10 print(int1)
#main2.py from main1 import func1 def func2(): int2 = 20 print(int2)

Если так сделать, то смотря с какого файла ты запустишь программу вылезет такая ошибка:

ImportError: cannot import name ‘main1’ from partially initialized module ‘main2’ (most likely due to a circular import)

  1. Если Вы собрались компилировать программу через pyinstaller в один .exe файл, то не забудьте прописать это:

pyinstaller —onefile main1.py -p main2.py

Первое название файла после —onefile будет выступать некой «точкой запуска», то есть файл main1.py будет являться основной программой. Имейте это в виду.

Надеюсь, автор получил тот ответ, который хотел.

Источник: ru.stackoverflow.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru