powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python exec
10 сообщений из 10, страница 1 из 1
Python exec
    #40124421
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: python
1.
exec(open('MsgBoxOK.py', 'r', encoding='utf-8').read(), globalz, localz)


здравствуйте, нашёл, что можно так прописать, но не понял, как оформлять файл для того, чтобы не плодить много файлов, а чтобы было всё в одном, чтобы в одном файле было несколько процедур, как их оформить и как вызвать нужную?
и судя по названиям globalz, localz это вроде не оба в файле, можно подробностей? спасибо
...
Рейтинг: 0 / 0
Python exec
    #40124443
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофа,

Написание модулей/библиотек и выполнение скриптов
(их вызов, а так-же выполнение программ/приложений)
- это всё-таки довольно разные вещи,

если я правильно понял вопрос то это немного для другого
exec предназначен именно для выполнения модулей класса скрипт

для загрузки модулей типа package или libriary (и до целых фреймворков)
содержащих дефиниции функций/методов (часто по классам) существует import

вполне можно при желании прописать все дефиниции в одном mytestpackage.py файле через кучу отдельных def....
и потом после импорта вызывать их сколько угодно.
...
Рейтинг: 0 / 0
Python exec
    #40124455
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkiv, разобрался я, одним словом можно файл MsgBoxOK.py оформлять как захочешь, потом и считывать согласно того как оформил
например знать, что между #start MsgBoxOK и #end MsgBoxOK то, что тебе нужно, это выход
я то думал, что можно также оформит её как функцию, в том числе и с параметрами, например def df_loc(loc_text): и вызывать её но с файла или оформить как то другим способом, словарь например.......
...
Рейтинг: 0 / 0
Python exec
    #40124491
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но оказалось, что то, что сделано в этом запускаемом файле не передаётся обратно и как можно решить?
...
Рейтинг: 0 / 0
Python exec
    #40124515
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну спасает, что можно сделать через буфер обмена, но это костыли - надо очистить последний её объект
Код: python
1.
pyperclip.copy('')  # очистить буфер обмена=скопировать пустую строку


не подходит, как удалить последний объект буфера обмена? спасибо
...
Рейтинг: 0 / 0
Python exec
    #40124527
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофа,

зачем эти костыли и натягивание совы на глобус, есть стандартные подходы,
допустим в простейшем примере у тебя в файле mytestmodule .py
(лежащем в current working directory) определены какие-то функции:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
def test1(a:int=5,b:int=8)-> int:
    """some test1 helper string - this is multiplication"""
    x:int=a
    y:int=b
    z:int=x*y
    return int(z)
def test2(a:int=8,b:int=2)-> int:
    """some test2 helper string - this is division"""
    x:int=a
    y:int=b
    z:int=x/y
    return int(z)


тогда в текущем скрипте их можно вызвать так:
Код: python
1.
2.
3.
4.
5.
6.
import mytestmodule as mt
print(mt.test1.__doc__)
print(mt.test1(4,5))
print(mt.test1(8))
print(mt.test2(2))
int(mt.test1(8)*mt.test2(2))
...
Рейтинг: 0 / 0
Python exec
    #40124531
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkiv, спасибо за ответ, то что можно модулем сделать я знал, но меня пугало то, что я думал, что его нужно устанавливать..........сорри, это для меня новый опыт и пока комом, я действую так, тестирую:
Код: python
1.
2.
3.
import MsgBox as mt

print(mt.MsgBoxYesNo.__doc__)



а в файле MsgBox.py у меня простейший MsgBoxYesNo:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
def MsgBoxYesNo(a:title,b:prompt):
	# vb_Yes_No = MsgBox("Вопрос", vbYesNo, "MsgBoxДа\Нет") 'VBA Yes = 6, No = 7
	title = 'sms' # title = заголовок
	prompt = 'txt' # prompt = подсказка, то есть тело формы, \n - абзац можно применять
	import pyperclip  # pip install pyperclip
	from tkinter import *
	def click_buttonY(): root.destroy(); pyperclip.copy('btn_textY'); # копирует текст в буфер обмена # print(btn_text); # exit(0) # destroy = уничтожать, разрушать
	def click_buttonN(): root.destroy(); pyperclip.copy('btn_textN'); # копирует текст в буфер обмена # print(btn_text); # exit(0) # destroy = уничтожать, разрушать
	root = Tk()
	# root.resizable(0, 0)  # делает неактивной кнопку Развернуть
	# root.attributes('-toolwindow', True)  # удаляет кнопки Свернуть Развернуть, удаляет Иконку
	### root.attributes('-disabled', True)  # блокирует кнопки Свернуть Развернуть Закрыть, и остальные элементы при нажатии в любом месте формы раздаётся звук
	# root.attributes('-fullscreen', True)  # делает во весь экран, кнопки Свернуть Развернуть Закрыть отсутствуют
	root.overrideredirect(True)  # отображет форму без шапки формы
	root.title(title)
	w=700 # ширина
	h=200 # высота
	w_monitor=250 # место появления формы на экране, ширина от края экрана
	h_monitor=250 # место появления формы на экране, высота от края экрана
	root.geometry(str(w) + 'x' + str(h) + '+' + str(w_monitor) + '+' + str(h_monitor)) 
	# названия шрифта, размер, стиль bold=полужирное начертание, normal — нормальное начертание
	Label1 = Label(text=prompt, font=('Arial', 12, 'bold'))
	Label1.place(x=10, y=10)
	# !!!!!!!!!!!!!! при использовании метода place() не надо использовать метод pack()
	# Label1.pack() # метод pack(), чтобы сделать элемент видимым
	btnY = Button(text='Yes',  # текст кнопки
             background='#555',  # фоновый цвет кнопки
             foreground='#ccc',  # цвет текста
             padx='30',  # ширина
             pady='10',  # высота
             font='16',  # высота шрифта
             command=click_buttonY)  # обработчик кнопки
	btnY.place(x=20, y=130)
	# !!!!!!!!!!!!!! при использовании метода place() не надо использовать метод pack()
	# btnY.pack() # метод pack(), чтобы сделать элемент видимым
	btnN = Button(text='No',  # текст кнопки
             background='#555',  # фоновый цвет кнопки
             foreground='#ccc',  # цвет текста
             padx='30',  # ширина
             pady='10',  # высота
             font='16',  # высота шрифта
             command=click_buttonN)  # обработчик кнопки
	btnN.place(x=180, y=130)
	# !!!!!!!!!!!!!! при использовании метода place() не надо использовать метод pack()
	# btnN.pack() # метод pack(), чтобы сделать элемент видимым
	root.mainloop()  # оставляем окно открытым


пока получаю ошибку
Traceback (most recent call last):
File "C:\pythonProject\sudrf.ru1.py", line 2, in <module>
import MsgBox as mt
File "C:\pythonProject\MsgBox.py", line 1
def MsgBoxYesNo(a:title,b:prompt):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: import * only allowed at module level
в чём я ошибаюсь, и как мне потом запускать с параметрами title и prompt?
спасибо
...
Рейтинг: 0 / 0
Python exec
    #40124535
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, он ведь кроме того что пишет в явном виде что за ошибка
которую стоило-бы прочитать, понять, отформатировать и исправить либо переместив эти строчки в нужное место либо изменив форму импорта
ещё по идее должен подчёркивать эту ошибку в соответствующей строке в UI
лучше всего будет начать от простого к сложному вместо того чтобы сразу лезть в самое пекло без должного инструментария.
ну и вспомнить один из вариантов процесса дебаггинга - например убирать из кода строки пока не найдётся ошибка чтобы хотя-бы примерно определить где-же проблема.

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

я такими вещами не занимаюсь, у нас на проектах специфика больше в сторону простого набор команд
и операций для обработки данных из получаемых датасетов с выдачей результата куда-то
поэтому вряд-ли смогу что-то посоветовать, т.к. это совсем другая область применения питона (front-end)
...
Рейтинг: 0 / 0
Python exec
    #40124538
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
п.с.
то как указаны title и prompt - это очевидно что не параметры, а что-то другое, которое надо-бы ещё и задать для начала, если это параметры то пишется по другому.
...
Рейтинг: 0 / 0
Python exec
    #40124569
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkiv, взял пример попроще с инета:
Код: python
1.
2.
3.
4.
5.
6.
# свой модуль, запуск:
import mymodule
mymodule.hello(title='11', prompt='22')
# файл mymodule.py
def hello(title, prompt):
    print('Hello, world!', title, prompt) # => Hello, world! 11 22


и на основе его сделал, спасибо не так страшен чёрт как его рисуют........
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python exec
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]