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

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

Например: я использую 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 — собственно главный исполняющий файл, в который я и хочу все добавить.
Эти два файла между собой связаны и прекрасно работают. Это просто для показа связи

Читайте также:
Программа petousb не видит флешку

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 куда-то в общее пространство. И вот так через общее пространство, где ходят все сигналы приложения, этот сигнал попадёт в слот и тот на него среагирует.

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

Читайте также:
Adobe premiere похожие программы

Отредактировано 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