Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 28, 2009 20:36:41

ReinRaus
От:
Зарегистрирован: 2008-10-24
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Много легких вопросов по питону.

1. Как сделать import модуля, который находится к примеру в c:/my_random_folder/
2. Как вызвать на исполнение другой скрипт ру и при этом сразу же завершить текущий. Это нужно для разных ОС, симбиан в частности. Ну типа скрипт делает обновление себя через интернет посредством вызова скрипта-апдетера и закрытия самого себя.
3. Как запустить код находящийся в другом файле в той же области видимости переменных. Бред какой-то написал. В общем ищу аналог include в php, если он есть конечно.



Офлайн

#2 Янв. 29, 2009 01:08:25

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Много легких вопросов по питону.

ReinRaus
1. Как сделать import модуля, который находится к примеру в c:/my_random_folder/
добавить эту директорию в sys.path
ReinRaus
2. Как вызвать на исполнение другой скрипт ру и при этом сразу же завершить текущий. Это нужно для разных ОС, симбиан в частности. Ну типа скрипт делает обновление себя через интернет посредством вызова скрипта-апдетера и закрытия самого себя.
смотрите модуль subprocess
ReinRaus
3. Как запустить код находящийся в другом файле в той же области видимости переменных. Бред какой-то написал. В общем ищу аналог include в php, если он есть конечно.
include к счастью нет. Можно поиграться с import + globals()/locals() или execfile



Офлайн

#3 Янв. 29, 2009 11:06:37

ReinRaus
От:
Зарегистрирован: 2008-10-24
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Много легких вопросов по питону.

Daevaorn
добавить эту директорию в sys.path
муторно. и много директорий. Притом возможно вообще неизвестно какая директория, а определяется пользователем.
Daevaorn
смотрите модуль subprocess
не пойдет… слишком сложно… я думал есть простое решение, дело в том, что один и тот же скрипт должен работать на разных ОС, а подгружать из интернета недостающие для работы модули или включать их сразу в архив при распространении не целесообразно.
Daevaorn
include к счастью нет.
Когда код программы чрезмерно большой очень удобно выносить его часть в другой файл и потом вставлять при помощи include для улучшения читабельности. Связка “к счастью” не совсем корректна.



Офлайн

#4 Янв. 29, 2009 11:08:48

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Много легких вопросов по питону.

Daevaorn
смотрите модуль subprocess
Этого модуля на симбиан нет, если топикстартеру именно это нужно, но там есть возможнотсь запускать демона (но только без ui).
А вообще, я посоветовал бы пересмотреть архитектуру приложения.
http://python.su/blog/public/2008/09/17/podderzhka-plaginov-v-programmah-na-python



Офлайн

#5 Янв. 29, 2009 11:34:51

ReinRaus
От:
Зарегистрирован: 2008-10-24
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Много легких вопросов по питону.

Скорее всего придется как раз таки и пересмотреть архитектуру. Изменить порядок: не основная программа вызывает обновление, а наоборот, сначала проверка обновления, потом старт основной программы.



Офлайн

#6 Янв. 29, 2009 11:53:15

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Много легких вопросов по питону.

Ну так обновляй, складывай новую версию в папку и импортируй. “Вынос” кода, это как раз модули.

ReinRaus
муторно. и много директорий. Притом возможно вообще неизвестно какая директория, а определяется пользователем.
Зачем муторно? Делаешь пакет модулей в одной папке. И в sys.path добавляешь всего одну папку, в которая может опраделяться пользователем тоже…
Пример: два модуля test1.py и test2.py. Создай папку my,содержащую твои модули, и (пустой) файл __init__.py , sys.path.append('c:/folder'). И далее импортируй спокойно import my.test1 import my.test2
Ничего сложного на практике



Офлайн

#7 Янв. 29, 2009 13:09:08

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Много легких вопросов по питону.

ReinRaus
2. Как вызвать на исполнение другой скрипт ру и при этом сразу же завершить текущий. Это нужно для разных ОС, симбиан в частности. Ну типа скрипт делает обновление себя через интернет посредством вызова скрипта-апдетера и закрытия самого себя.
os.exec* - загружает другой процес вместо текущего, насколько я понял то что тебе надо.



Офлайн

#8 Янв. 30, 2009 17:44:43

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Много легких вопросов по питону.

ReinRaus
3. Как запустить код находящийся в другом файле в той же области видимости переменных. Бред какой-то написал. В общем ищу аналог include в php, если он есть конечно.
from module import *
Это не абсолютный аналог, но очень близко. Отличие - модуль вставляется не как текст, но выполняется в области видимости модуля, в котором вызывается импорт. Обратите внимание, что именно на уровне модуля, а не любой области видимости, где вызывается импорт. В принципе, такой код также будет работать:
def fun():
from module import *
Но интерпретатор при этом ругнется - “SyntaxWarning: import * only allowed at module level”



Офлайн

#9 Янв. 30, 2009 17:56:57

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Много легких вопросов по питону.

Совсем забыл добавить - такая директива не спасет человечество (тем более, что модуль все-равно должен лежать в path) и использовать ее совсем не рекомендуется. Импортировать модуль, зная путь, можно используя imp. Но по-хорошему нужно для начала курить http://www.python.org/dev/peps/pep-0302/
Еще неплохо ознакомится с модулем runpy.



Офлайн

#10 Янв. 31, 2009 10:24:34

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2740
Репутация: +  183  -
Профиль   Отправить e-mail  

Много легких вопросов по питону.

>муторно. и много директорий. Притом возможно вообще неизвестно какая директория, а определяется пользователем.

__import__(путь_к_модулю)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version