Показаны сообщения с ярлыком Python. Показать все сообщения
Показаны сообщения с ярлыком Python. Показать все сообщения

вторник, 2 августа 2011 г.

Автозагрузка python приложения в Windows

Осуществить данную задачу можно двумя путями, первый состоит в том, чтобы записать значение в реестр (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run), здесь подробно описан данный метод. Однако при этом нам будет необходимо разрешение на запись в реестр, и чтобы его получить придется постараться.

Второй путь проще и не требует особых привилегий программе, для этого необходимо создать ярлык программы в C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (путь для Windows 7).

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


import winshell

import os
import sys

def set_startup():
try:
# get path and file name for application
startFile = os.path.abspath(sys.argv[0])
# get startup folder
startup=winshell.startup()
# create shortcut in startup folder
winshell.CreateShortcut (
Path=os.path.join (startup, "application.lnk"),
Target=startFile,
Icon=(startFile, 0),
Description="My application",
StartIn=os.path.abspath(None)
)
except :
pass

def remove_startup():
try:
startup=winshell.startup()
# remove shortcut from startup folder
if os.path.isfile(startup + '\\application.lnk'):
os.remove(startup + '\\application.lnk')
except :
pass


В коде использован пакет winshell, позволяющий получать доступ к специальным папкам Windows.

среда, 20 апреля 2011 г.

Как можно скопировать объект в Python?

Используйте copy.copy или copy.deepcopy для большинства объектов, но не всех.

import copy

newobj = copy.copy(oldobj) # неполная копия
newobj = copy.deepcopy(oldobj) # полная (рекурсивная) копия

Неполное копирование строит новый составной объект, а затем ( по мере возможности ) вставляет ссылки в него на объекты оригинала.

Глубокое копирование строит новый составной объект, а затем рекурсивно, вставляет копии объектов оригинала в него.

Некоторые объекты могут быть скопированы проще. Так словари (dictionary) имеют метод copy:

newdict = olddict.copy()

Последовательности (sequence) могут быть скопированы через срезы (slice):

new_list = L[:]

Можно также использовать функции list, tuple, dict, set для копирования соответствующих объектов, также и для преобразования между различными типами последовательности:

new_list = list(L) # копирование
new_dict = dict(olddict) # копирование

new_set = set(L) # конвертирование list в set
new_tuple = tuple(L) # конвертирование list в tuple
Оригинал

среда, 6 апреля 2011 г.

Получение имени процесса по идентификатору активного окна

Столкнулся с задачей получения имени процесса по идентификатору активного окна в среде Windows.

Задача довольно не тривиальная и пришлось немного помучиться, в итоге нашел прекрасный модуль psutil, позволяющий получить информацию обо всех запущенных процессах и использования ресурсов системы ( процессор, память ), модуль написан на Си и работает на Linux, Windows, OSX, FreeBSD как на 32-bit так и на 64-bit с вериями Python от 2.4 до 3.2, что является большим плюсом.

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

    import win32gui
    import win32process
    import psutil
    
    def get_process_name():
        # получаем id активного окна
        hdlr = win32gui.GetForegroundWindow()
        # получаем id процесса с помощью id окна
        pid = win32process.GetWindowThreadProcessId(hdlr)
        # получаем список всех активных процессов с помощью модуля psutil
        processes = psutil.get_pid_list()
        # ищем наш процесс
        for p in processes:
            if p == pid[1]:
            # нашли его, получаем этот процесс и возвращаем его имя
                process = psutil.Process(p)
                return process.name
    

Вот в общем и все, получилось довольно кратко и главное эффективно.

Чтобы получить тот же результат в Linux, OSX, FreeBSD необходимо получить id процесса, для этого можно использовать этот инструмент xdotool.

четверг, 31 марта 2011 г.

Управление пакетами в Python

В настоящее время Python обладает всеми необходимыми инструментами для манипулирования пакетами. О двух из них, являющиеся актуальными на данный момент и пойдет речь ниже. Cуществует также и третий инструмент Virtual Environments, который позволяет создавать изолированное окружение Python. Сочетание этих инструментов поможет найти, установить и удалить пакеты.