Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3487 posts.

Центр помощи » Помощь новичку » Июнь 14, 2011 15:37:41

Честно признаюсь в питоне не бум бум, но это последний зачет, даже без экзамена, и надо создать приложение

Приложение, обнаруживающее процессы, открывшие заданный файл с заданной маской доступа.
Функциональные возможности:

Получение информации об открытых файлах из каталога /proc.
Получение всей доступной информации о процессах, открывших заданные файлы.
Генерация отчета в удобной для чтения форме.

мыслей почти нет, как завязать название файла и заданную маску, мыслей ноль, подскажите пожалуйста в какую сторону рыть

import commands, os, string

program = raw_input(“Enter the name of the program to check: ”)
mask = raw_input(“Enter the mask: ”)

try:
output = commands.getoutput(“ps -f|grep ” + program)
proginfo = string.split(output)

#display results
print “\n\
Process ID:\t\t”, proginfo, “\n\
Parent process ID:\t”, proginfo, “\n\
except:
print ”There was a problem with the program."

Python для новичков » Basemap в Matplotlib » Июнь 14, 2011 10:52:53

подскажите, пожалуйста, кто-нибудь работал с Basemap в Matplotlib в “винде”. Как поставить модуль в Питон? Что-то не получается автономно )))

Флейм » Промо-код яндекс директ » Июнь 13, 2011 21:41:15

народ если у кого есть поделитесь

Python для новичков » Thread в Qt4 (QObject: Cannot create children) » Июнь 11, 2011 20:10:49

Помогите пожалуйста разобраться в чем ошибка, необходимо получать URL через rabbit, рендерить его и печатать pdf

#!/usr/bin/env python2
# -*- coding: UTF-8 -*-

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
import sys, pika, threading

class RabThread(threading.Thread):

def run(self):
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='pdf_render')

def callback(ch, method, properties, body):
print "[x] callback Received %r" % (body,)
url_load(body)
channel.basic_consume(callback,queue='pdf_render',no_ack=True)
channel.start_consuming()


if __name__=="__main__":

def url_load(url_str):
print "[+] rabbit taken url:",url_str
web.load(QUrl(url_str))
return 0

def printIt():
print "[*] Page print"
web.print_(printer)
return 0

app = QApplication(sys.argv)
web = QWebView()

web.load(QUrl("http://gmail.com"))
web.show()

printer = QPrinter()
printer.setPageSize(QPrinter.A4)
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setOutputFileName("tmp.pdf")

RabThread().start()
QObject.connect(web, SIGNAL("loadFinished(bool)"), printIt)
sys.exit(app.exec_())
При получении сообщения, приложение пишет в консоль примерно следующее:
[*] Page print
[x] callback Received 'http://site.com'
QObject: Cannot create children for a parent that is in a different thread.
[+] rabbit taken url: http://site.com
(Parent is QNetworkAccessManager(0x2e60aa0), parent's thread is QThread(0x2a42ef0), current thread is QThread(0x331a0e0)

Web » Проблема при получении кук » Июнь 9, 2011 16:05:19

Проблема возникла при попытке удалённо запускать облако в небезызвестном ДЦ. API отсутствует, но в саппорте мне прислали инструкцию как это можно сделать.
1) Авторизация на сайте, получение и сохранение cookie:
curl -v –cookie-jar /tmp/cloud.txt –data “action_method=GET&user=ЛОГИН&pass=ПАРОЛЬ” https://support.selectel.ru/
2) Непосредственно команда для запуска машины:
curl -v –cookie /tmp/cloud.txt "https://support.selectel.ru/cloud/proxy.php?uuid=ИДЕНТИФИКАТОР_МАШИНЫ&;action=vm-start";;;
3) Удаление cookie:
rm /tmp/cloud.txt
Вот что я накодил:
import urllib
import urllib2

urllib2.install_opener(urllib2.build_opener(urllib2.HTTPCookieProcessor))
def main() :
params = urllib.urlencode({
'user' : "**",
'pass': "****"
})
f = urllib2.urlopen(
"https://support.selectel.ru/",
params)
start = urllib2.urlopen("https://support.selectel.ru/cloud/proxy.php?uuid=4405&;action=vm-start", params)
raw_input()
main()
К моему сожалению не работает. Переписывал уже несколько раз. В питоне не силён. Заранее спасибо за помощь.

GUI » Редактируемая XML DOM-модель в PyQt » Июнь 8, 2011 16:29:57

Хочу написать редактируемую XML DOM-модель в PyQt с помощью QAbstractItemModel и QTreeView, но запутался в понимании сути “модель-представление”.
Не встречал ли кто готового решения?

В примерах PyQt есть нередактируемая модель (simpledommodel.pyw) но толку от нее мало.

Флейм » Добрый времени суток, господа! » Июнь 8, 2011 13:16:06

Добрый времени суток, господа!
Давненько меня здесь не было. Чё у нас нового?

Python для новичков » Получить FileInfo у dll и exe » Июнь 7, 2011 11:32:41

собственно для реализации использую version.dll
есть код на сях который работает как надо. Пытаюсь переписать его на python
на сях:
// пример использования VerQueryValue
// вывод для avtapi.dl выглядит как:
/*
CompanyName: Корпорация Майкрософт
FileDescription: Программа вызова TAPI 3.0 и просмотра конференций многоадресной IP-рассылки
FileVersion: 5.1.2600.0 (xpclient.010817-1148)
InternalName: AVTAPI
LegalCopyright: c Корпорация Active Voice, 1998. Все права защищены.
LegalTradeMarks: нет информации
OriginalFilename: AVTAPI
ProductName: Операционная система MicrosoftR WindowsR
ProductVersion: 5.1.2600.0
Comments: нет информации
Author: нет информации
*/

#include <tchar.h>
#include <windows.h>
#include <stdio.h>

#pragma comment (lib, "version.lib") // указываем библиотеку, содержащую GetFileVersionInfoSize и т.п.

// наша функа
void PrintVersionStringInfo(const TCHAR *fileName)
{
PLONG infoBuffer; // буфер, куда будем читать информацию
DWORD infoSize; // и его размер

struct LANGANDCODEPAGE { // структура для получения кодовых страниц по языкам трансляции ресурсов файла
WORD wLanguage;
WORD wCodePage;
} *pLangCodePage;

// имена параметров, значения которых будем запрашивать
const TCHAR *paramNames[] = {
_T("CompanyName"),
_T("FileDescription"),
_T("FileVersion"),
_T("InternalName"),
_T("LegalCopyright"),
_T("LegalTradeMarks"),
_T("OriginalFilename"),
_T("ProductName"),
_T("ProductVersion"),
_T("Comments"),
_T("Author")
};

TCHAR paramNameBuf[256]; // здесь формируем имя параметра
TCHAR *paramValue; // здесь будет указатель на значение параметра, который нам вернет функция VerQueryValue
UINT paramSz; // здесь будет длина значения параметра, который нам вернет функция VerQueryValue

// получаем размер информации о версии файла
infoSize = GetFileVersionInfoSize(fileName, NULL);
if ( infoSize > 0 )
{
// выделяем память
infoBuffer = (PLONG) malloc(infoSize);

// получаем информацию
if ( 0 != GetFileVersionInfo(fileName, NULL, infoSize, infoBuffer) )
{
// информация находится блоками в виде "\StringFileInfo\кодовая_страница\имя_параметра
// т.к. мы не знаем заранее сколько и какие локализации (кодовая_страница) ресурсов имеются в файле,
// то будем перебирать их все
UINT cpSz;
// получаем список кодовых страниц
if ( VerQueryValue(infoBuffer, // наш буфер, содержащий информацию
_T("\\VarFileInfo\\Translation"),// запрашиваем имеющиеся трансляции
(LPVOID*) &pLangCodePage, // сюда функция вернет нам указатель на начало интересующих нас данных
&cpSz) ) // а сюда - размер этих данных
{
// перебираем все кодовые страницы
for (int cpIdx = 0; cpIdx < (int)(cpSz/sizeof(struct LANGANDCODEPAGE)); cpIdx++ )
{
// перебираем имена параметров
for (int paramIdx = 0; paramIdx < sizeof(paramNames)/sizeof(char*); paramIdx++)
{
// формируем имя параметра ( \StringFileInfo\кодовая_страница\имя_параметра )
_stprintf(paramNameBuf, _T("\\StringFileInfo\\%04x%04x\\%s"),
pLangCodePage[cpIdx].wLanguage, // ну, или можно сделать фильтр для
pLangCodePage[cpIdx].wCodePage, // какой-то отдельной кодовой страницы
paramNames[paramIdx]);

// получаем значение параметра
if ( VerQueryValue(infoBuffer, paramNameBuf, (LPVOID*)&paramValue, &paramSz));
// и выводим его на экран
/*
PrintRusLine(paramValue, paramNames[paramIdx]);
else
PrintRusLine(_T("нет информации"), paramNames[paramIdx]);*/
}
}
}
}

free(infoBuffer);
}
}

int _tmain(int argc, _TCHAR* argv[])
{
PrintVersionStringInfo( _T("d:\\user32.dll") );

return 0;
}
мой код на питоне (скорее всего корявый ибо 2 недели за ним)
import ctypes as ct
import struct
import sys


versionGetter = ct.windll.LoadLibrary("d:\\version.dll")
testfile = "d:\\user32.dll"

class LANGANDCODEPAGE(ct.Structure):
_fields_ = [("wLanguage", ct.c_ushort),
("wCodePage", ct.c_ushort)]

n = versionGetter.GetFileVersionInfoSizeW(testfile, 0)
print("FileVersionInfoSize: ", n)
infoBuffer = ct.create_string_buffer(n)
versionGetter.GetFileVersionInfoW(testfile, 0, n, ct.byref(infoBuffer))
tt = struct.unpack(str(n//4) + "L", infoBuffer)
print(tt)
cpSz = ct.c_uint(0)
langAndCodePage = LANGANDCODEPAGE(0, 0)

versionGetter.VerQueryValueW(infoBuffer, "\\VarFileInfo\\Translation", \
ct.byref(langAndCodePage), ct.byref(cpSz)) #КОСЯК ТУТ!
print("cpSz: ", cpSz.value)
print("wLanguage :", langAndCodePage.wLanguage, " wCodePage: ", langAndCodePage.wCodePage)
'''
buffer = ct.create_string_buffer(4)
versionGetter.VerQueryValueW(infoBuffer, "\\VarFileInfo\\Translation", \
buffer, ct.byref(cpSz))
print("cpSz: ", cpSz.value)
tt2 = struct.unpack("2H", buffer)
print(tt2)
'''
собственно по самой проблеме: значения переменных n, infoBuffer, cpSz - полностью совпадают с аналогичными значениями, которые выдает код на сях. Не те значения выдает langAndCodePage.wLanguage и langAndCodePage.wCodePage. При это значения у них всегда разные. В закомменченной части пробовал через буфер - собственно тоже самое и получается. Найти причину не получается - посему обращаюсь к опытным питонерам за помощью.

GUI » PyQT4 - ширина окна » Июнь 7, 2011 09:52:52

Хочу вывести виджет, прилепленный к правому краю десктопа:
class WND(QtGui.QMainWindow):
def __init__(self, STR):
...
self.scrRect = QtGui.QDesktopWidget().screenGeometry()
self.move(self.scrRect.width() - self.width(), -4)
С высотой нормально (кстати, тоже вопрос: как правильно определять высоту заголовка получившегося окна? с учётом того, что пользователь может тему свою поставить, размеры кнопок и толщину рамки изменить…) Но почему-то виджет/окно почти наполовину улезает вправо за экран. Как надо правильно определять ширину виджета?

Причём добавлю: окно сдвинуто неодинаково: иногда почти нормально, иногда почти наполовину задвинуто за экран. Думается мне, что move надо делать не в __init__. Но тогда где? Между __init__ и отрисовкой окна происходит его заполнение (вывод текста в TextEdit, который во всё это окно) Но с изменением размеров контролов оно не связано (хотя это я так думаю, может там при каждом выводе какие-нибудь DPI пересчитываются…)

Network » pyrad и timeout » Июнь 6, 2011 18:48:46

Добрый день, коллеги.

Пытаюсь сделать одну маленькую поделку…
Для астера авторизация вызова через radius

Использую модуль pyrad

При отправлении пакета на авторизацию, ответ от самого сервера есть, а модуль возвращает timeout.

Вот запрос:

import sys
import socket
import pyrad.packet
from pyrad.client import Client
from pyrad.dictionary import Dictionary

#pyrad.client.timeout=10

srv = Client(server="******", secret="*********", authport=1812,
dict=Dictionary("dictionary"))

req = srv.CreateAuthPacket(code=pyrad.packet.AccessRequest)
req["User-Name"]="90000003"
req["NAS-IP-Address"]="*******"
req["Calling-Station-Id"]="90000003"
req["Called-Station-Id"]="7926******"
req["h323-gw-id"]="***********"
req["h323-remote-address"]="80.***.***.***"
req["h323-conf-id"]="C0C44122 2DD611CC A417ACEB 04AF8742"

try:
reply=srv.SendPacket(req)
except pyrad.client.Timeout:
print "radius server does not reply"
sys.exit(1)
except socket.error,error:
print "Network Error: " + error[1]

if reply.code==pyrad.packet.AccessAccept:
print "access accepted"
else:
print "access denied"

print "Attributes returned by server:"
for i in reply.keys():
print "%s: %s" % (i,reply[i])
Вывод tshark:


992.177174 client -> server RADIUS Access-Request(1) (id=186, l=177)
992.211383 server -> client RADIUS Access-Reject(3) (id=186, l=47)

Но модуль все время возвращает timeout

raise Timeout
pyrad.client.Timeout

Network » Закрытие сокета » Июнь 5, 2011 01:40:29

Помогите пожалуйста! Как правильно закрыть сокет, чтобы поток завершился?
class WebSocket(threading.Thread):
users={}
queries = deque()
server=0
address=0
port=0
connections=0
stopkey = False
def __init__(self, address, port, connections):
threading.Thread.__init__(self)
logging.debug('W.%s',self.getName())
self.address = address
self.port = port
self.connections = connections

def run(self):
self.server = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
self.server.bind ( ( self.address, self.port ) )
self.server.listen ( self.connections )
logging.debug('W.start wsserver ')
while True:
if(self.stopkey):
break
else:
conn,address = self.server.accept()
self.add_user(conn,address)



def stop(self):
for user in self.users.itervalues():
logging.debug('W.stopping user %s', user)
user.stop()
logging.debug('W.stop wsserver ')
self.stopkey = True
self.server.shutdown(socket.SHUT_RDWR)
self.server.close()
А также, как принудительно закрыть соединение с клиентом в WebSocketThread?
В таком виде поток завершается только когда клиент закрывает страницу.

class WebSocketThread(threading.Thread):
stopkey = False
def __init__ ( self, conn,adress,websocket,user_id ):
self.conn = conn
self.adress = adress
self.websocket = websocket
self.user_id = user_id
threading.Thread.__init__( self )
logging.debug('W.user %s',self.getName())

def run ( self ):
self.handshake()
while True:
if(self.stopkey):
logging.debug('WS.stop user %s',self.user_id )
self.conn.close()
break
else:
self.interact()

def stop(self):

self.stopkey = True

def interact(self):
data = self.recv_data(512)
data = data.decode('utf-8', 'ignore')
data_split = data[1:].split(",")
logging.debug(data_split)
if(data_split[0]=="WORK"):
query = ['W',self.user_id]
self.websocket.query(query)
if(data_split[0]=="RESULT"):
query = ['R',[string.atoi(data_split[1],10),string.atoi(data_split[2],10)]]
self.websocket.query(query)
if(data_split[0]==""):
self.stop()
Извиняюсь за индусский код, это мой второй проект на питоне, писал впопыхах.

Центр помощи » Django требуется помощь доделать курсовой проект » Июнь 4, 2011 10:57:08

Требуется помощь доделать курсовой проект,оформленный в виде сайта.За оплату разумеется.

За подробностями icq 380994471, либо email miklnuton@mail.ru.

Python для новичков » Взаимодействие с операционной системой. » Июнь 1, 2011 13:24:22

Здравствуйте. Подскажите какими модулями пользоваться. Нужно по команде блокировать и разблокировать мышку и клавиатуру, в windows и Linux

Web » mechanize - скачивание больших файлов » Июнь 1, 2011 08:22:03

Подскажите пожалуйста, как с помощью mechanize скачивать файлы?
Простейший код
br = mechanize.Browser()
br.retrieve(link, filename)
сливает метров ~500 и вылетает с ошибкой. ругается на 199 строку модуля mechanize._response.py
198            else:
199 self.__cache.write(data)
200 self.__cache.seek(pos)
пишет: MemoryError: out of memory

ЗЫ. win7, python 2.7.1, mechanize 0.2.5

Центр помощи » Вопрос по matlab » Май 31, 2011 21:50:50

Какие многочлены для аппроксимации непрерывных функций используются в таких пакетах как MATLAB или MAPLE

спасибо,

Mobile Python » Передача POST запроса. » Май 31, 2011 12:30:17

Пишу приложение для symbian 60.
Кусок кода:
class Main:
def __init__(self):
app.screen='normal'
self.fields=[
(u"To",'text',u''),
(u"From",'text', u''),
(u"Message",'text', u''),
]
self.form=Form(self.fields,flags=FFormDoubleSpaced|FFormEditModeOnly)
self.form.menu=[(u'Send',self.sendpost)]
self.form.execute()
def sendpost(self):
params = urllib.urlencode({'send': to, 'by':from, 'text': message})
(...код самого post...)
appuifw.note(u"Okay", "conf")
POST запрос передавать умею. Как передать именно то, что мы ввели в поля to, from, message?

Python для новичков » pyLZMA, py7zlib примеры использования. » Май 29, 2011 16:40:02

Если есть примеры использования (упаковки) пожалуйста дайте.

Python для новичков » Нужна помощь с PLY » Май 27, 2011 14:27:20

В документации http://www.dabeaz.com/ply/ply.html есть такой код :
# Declare the state
states = (
('ccode','exclusive'),
)

# Match the first {. Enter ccode state.
def t_ccode(t):
r'\{'
t.lexer.code_start = t.lexer.lexpos # Record the starting position
t.lexer.level = 1 # Initial brace level
t.lexer.begin('ccode') # Enter 'ccode' state

# Rules for the ccode state
def t_ccode_lbrace(t):
r'\{'
t.lexer.level +=1

def t_ccode_rbrace(t):
r'\}'
t.lexer.level -=1

# If closing brace, return the code fragment
if t.lexer.level == 0:
t.value = t.lexer.lexdata[t.lexer.code_start:t.lexer.lexpos+1]
t.type = "CCODE"
t.lexer.lineno += t.value.count('\n')
t.lexer.begin('INITIAL')
return t

# C or C++ comment (ignore)
def t_ccode_comment(t):
r'(/\*(.|\n)*?*/)|(//.*)'
pass

# C string
def t_ccode_string(t):
r'\"([^\\\n]|(\\.))*?\"'

# C character literal
def t_ccode_char(t):
r'\'([^\\\n]|(\\.))*?\''

# Any sequence of non-whitespace characters (not braces, strings)
def t_ccode_nonspace(t):
r'[^\s\{\}\'\"]+'

# Ignored characters (whitespace)
t_ccode_ignore = " \t\n"

# For bad characters, we just skip over it
def t_ccode_error(t):
t.lexer.skip(1)
Функция t_ccode_rbrace как видите возвращает некий результат с t.type = “CCODE”, интересует как правильно этот результат запустить далее на распарсивание, на предмет обнаружить в нем еще вложенности. Надеюсь вы меня поняли.

GUI » pygtk modify_font для gtk.Label gtk.MenuItem » Май 26, 2011 22:52:28

как уменьшить или увеличить шрифт для gtk.Label b gtk.MenuItem

font_desc = pango.FontDescription(self.font)
label.modify_font(font_desc)
menuitem..modify_font(font_desc)

не изменяют газмер текста.

Python для новичков » Обработка появления окна с ошибкой в windows. » Май 25, 2011 13:17:09

Здравствуйте.

Хотел бы услышать совет по поводу следующей проблемы: есть инсталлятор и хотелось бы сделать автоматизацию процесса установки, удаления и обработку ошибок, если они появляются.

Эмуляция нажатия клавиш доступна с помощью SendKeys, но только под win32.

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