LINUX.ORG.RU

304
Всего сообщений: 2340

python /dev/ttyAMA0 и проверка соединения

Имеется демон, который работает с nfc устройством. Устройство (nfc) поднимается при старте системы, возник вопрос, как это сделать на «горячую». Т.е. вытащил-вставил считыватель nfc, и он продолжил работать. Сейчас технику приходится бегать выключать питание компьютера, при установке и тестировании считывателей. если с usb считывателями всё понятно, то вот с AMA0 не понятно вообще ничего. ПС Считыватель в режиме «ожидание карты» не подает признаков жизни по интерфейсу.

 , ,

X286 ()

Встроенный текст в tiff

В файлах прекрасно видны с помощью less посреди всякой бинарщины. Есть ли какая готовая либа их надёжно прочитать?

 ,

ados ()

socket.send склеивает сообщения

Всем доброго времени суток!

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

msg = "a2"
s.send(msg.encode('ascii'))
msg = "b1"
s.send(msg.encode('ascii'))
приводит к тому, что иногда на выходе сообщение «a2b1», вместо двух «a2» и «b1». Возможно ли этого избежать или это нормально и надо продумывать обработку склеенных сообщений?

 

fractaler ()

Сгруппировать составляющие класса

Решил тут для разминки мозгов немного поучить Python и вспомнить навыки ООП (чего не сделаешь, чтобы не заниматься делами, хе-хе). Допустим, я хочу описать некоего абстрактного человека с вот такими характеристиками (не код, просто схема):

Person
|-name = 'John'
|-age = 40
|-face
  |-shape = 'round'
  |-color = 'bronzed'
|-body
  |-height = 'short'
  |-build = 'sturdy'
#и так далее...
Так вот, как получить структуру вроде той, что на схеме, чтобы потом писать, например, Person.face.shape? Нужно ли делать face и body классами внутри класса Person?

 , ,

al_exquemelin ()

Вывести последний элемент списка

Доброго времени суток ,есть набор цифр , он суммируется , и нужно вывести результат , цифры хранятся в словаре :

a=0
for line in ["5", "5", "5", "5", "5", "5"]:
     a = a + int(line)
     print(a)
то что я наваял вполне работает , но есть одно НО , нужно из этого всего вывести только число 30 а не все что он плюсует , прогу вашей помощи,ибо не хватает что то мне опыта )))

 , ,

echo_ ()

Удалить лишние классы в html via Beautiful Soup

<div class="mediawiki ltr ns-0 ns-subject page-xxsfds TOC_hide oasis-breakpoints wikinav2 skin-oasis user-anon wiki-xxsfds">

Как мне удалить все классы кроме mediawiki?

from bs4 import BeautifulSoup, Comment
import sys
import re
import os

with open(sys.argv[1], 'r') as content_file:
    data = content_file.read()

soup = BeautifulSoup(data, "lxml")

for div in soup.find_all("div", {'class':'mediawiki'}):
     <...>

Ну и чтобы два раза не вставать - когда пытаюсь писать в тот же файл мне prettify орет что файл не ASCII и оно не мочь в UTF-8 (даже если ставить .encode("UTF-8"). Приходится делать s.py > в отдельный файл, только так работает.

 ,

PPP328 ()

firefox - в разное время открывать разные страницы

Добрый день, уважаемые форумчане!

Есть 4 географически распределенные IP-камеры. Сейчас у меня в Ubuntu Firefox открывает страницу, где показываются изображения со всех 4-ех камер и изображения постоянно обновляются. Нужно, чтобы в момент рассвета в регионе, где установлена одна из камер, Firefox на весь экран открыл изображение только этой камеры. А когда рассвет закончится, то снова открыл бы страницу со всеми 4-мя камерами.

Вариант решения такой: 1. Открыть Firefox с нужной страницей со всеми камерами. 2. периодически обращаться к функции, которая возвращала бы высоту солнца над горизонтом в заданном регионе. 3. Если высота солнца -X гр., (середина утренних сумерек, например), то закрыть Firefox с 4 камерами и открыть на полный экран Firefox с одной камерой. 4. Если высота солнца +X гр., то вернуть Firefox с 4 камерами. 5. И, конечно, обвязать это все обработками ошибок, например, на недоступность основной страницы, на недоступность ip-камеры и т.д

Реализовывать это собираюсь на Python. А так как опыт не большой, то хотел с вами посоветоваться, правильно ли мое решение? Может быть есть более оптимальное, лаконичное, изящное решение?

Перемещено JB из desktop

 ,

vladvv ()

Flask-SQLAlchemy username:password config file

В документации Flask-SQLAlchemy (http://flask-sqlalchemy.pocoo.org/2.1/config/) указано передавать подключения через SQLALCHEMY_DATABASE_URI в виде «mysql://username:password@server/db». Фишка в том, что я совершенно не хочу хранить username и password в коде, т.к. неудивительно забыть сменить их на какие-то другие перед отправкой в репозиторий (а судя по новостям, нередко бывает такое, что палят пароли именно заливая их на тот же GitHub).

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

UPD: достаточно оформить хорошо тему на лоре, как правильный запрос приходит в голову.

Решение находится в http://exploreflask.com/en/latest/storing.html.
Для Ъ: в .gitignore закидываем (это умеет делать, к примеру, плагин для PyCharm .ignore

...
# Flask stuff:
instance/
...
После чего создаём instance/config.py в котором указываем
SQLALCHEMY_DATABASE_URI = "mysql://username:password@hostname/database"

Ну а используется это примерно так:

app = Flask(__name__, instance_relative_config=True)

app.config.from_object('config')
app.config.from_pyfile('config.py')

db = SQLAlchemy(app)

 , , ,

merhalak ()

Старая песня о главном: вызов Python из C++

Есть проект на C++. Надо вызывать некоторые функции (или лучше сказать, методы класса) из библиотеки, написанной на Python.

Я прочесал гуглинтернет и нашёл следующие наиболее распространённые подходы: использование Python C-API и Boost.Python. Дальше я впал в ступор, так как не могу выбрать лучший вариант. С одной стороны, Boost хорош всем, за исключением его «жирности». С другой стороны, C-API — это наиболее «прямой» путь, но есть подозрения, что делать обёртку Python-функций на нём — то ещё приключение...

Поэтому прошу помощи у гуру, кто уже делал что-либо подобное.

Упрощённый пример кода смогу подогнать, если потребуется...

Update: всем спасибо, остановился на pybind11 — просто и со вкусом :)

 ,

Sahas ()

Популярные сейчас веб-языки и фреймворки

Какие фреймворки и веб-языки стоит учить начинающему фрилансеру в 2017 году?

 , , ,

chen-san ()

vim вызвать потокобезопасную функцию из другого потока

Смотрю код пока сам, но глаз уже болит.

Может кто уже маялся таким.

Исходные данные:

  • python функция post_event которая ставит событие в очередь
  • viml функция post_event, которая вызывает python функцию
  • поток разбирающий очередь

Собственно вопрос - будет ли потокобезопасно, вызвать viml функцию post_event, из python скрипта в третьем потоке?

Сама правка контекста python интерпретатора вместе с локами и прочим стейтом по идее должна быть потокобезопасна. А вот как это согласовано с контекстом viml я что-то пока не пойму...

Upd: хочется сделать аналог post_event только вызывабельного из любой скриптоты поддерживаемой vim.

 , , , ,

pon4ik ()

Как постоянно прослушивать порт и отдавать данные?

Сабж
Нашел такое решение:

import socket

sock = socket.socket()
sock.bind(('127.0.0.1', 3333))
sock.listen(1)
conn, addr = sock.accept()

print ('connected:', addr)

while True:
	data = conn.recv(1024)
	if not data:
		break
	conn.send(data.upper())

conn.close()




Но сразу после отдачи данных скрипт завершается, а мне нужно, чтобы висел и отдавал на каждое обращение. Как это сделать? Если просто убрать conn.close() - все равно завершается

 , ,

Qwentor ()

Как на PHP забрать данные, выдаваемые Python скриптом?

Делаю так:

ob_start();
passthru('/usr/bin/python3 /root/robot/forks.py');
$output = ob_get_clean();
echo $output;


Но ничего не выводится.

Да, питоний скрипт отрабатывает не мгновенно, секунды полторы все выводит в консоль

Как правильно сделать?

 ,

Qwentor ()

Как вывести в файл чтобы интерактивно смотреть

Есть Matplotlib. Хороша, всё работает. Но хочу выводить графики в отчет, для этого вызываю savefig и оно падает в файл (например jpg). Но для этого приходится подстраивать масштаб, DPI и размер в дюймах. Не всегда это удобно. Иногда нужно увеличить части графика чтобы рассмотреть детальнее.

Существует ли в Matbplolib возможность вывода в какой-то удобный формат вместо plot в картинку? Чтобы затем ковыряться интерактивной программой. Примерно как это происходит при обычном show(), когда появляется окно. Вопрос в какой формат это выводить чтобы какая-то графосмотрелка открывала.

 ,

I-Love-Microsoft ()

Веб чят

Давно висел тикет, решил попилить на досуге

Предлагайте ваши предложения, желайте ваши пожелания, репортите баги, наслаждайтесь свободкой

https://beta.mlug.ru/chat/tsmr

UPD: чят переведён в режим ограниченного доступа, обращайтесь к администрации или ждите вечера

UPD2: чят открыт обратно, сильно не ломайте, всё ещё бета (которая даже не альфа)

UPD3: чят закрыт на реставрацию, приделываю антифлуд

UPD4: чят открыт обратно, антифлуд установлен на пять минут, разбанов не будет

UPD5: чят закрыт из-за засирания моего лога poll?uuid=undefined, открою когда сделаю нормальную обработку этой ситуации, Чините ботов тем временем

UPD6: чят открыт обратно, сделал проверку на инвалидные uuid, будет кидать вам 403 вместо багрепорта мне

 , , , ,

Goury ()

Бот для телеграмм на питон(получение картинки с веб камеры)

День добрый, на балконе лежит raspbery которая работает в качестве моста между ethernet и wifi, решил нагрузить её полезным функционалом. Хочу чтобы по запросу бот в телеграмм присылал фото с веб камеры(камера смотрит на дорогу и видно пробки полезно когда едешь домой и планируешь маршрут). Нашел на гитхабе пример (https://github.com/ericho/robotina). Собственно сам я в Python 0. Поэтому прошу помощи.

Код работает фото отсылает НО, видимо настройки с которыми делается фото не оптимальные, вечером картинка приходит нормальная, видно дорогу. а днем когда света больше картинка полностью засвеченная. Вопросов два 1. Как сделать авторизацию бота (добавить список пользователей которым можно пользоваться ботом) желательно отдельным файлом в котором прописать id пользователей. 2. Основная задача это как получать нормальную не засвеченную картинку. как то передавать параметры может яркость контрастность. Еще раз повторюсь в питон 0, если не затруднит поподробнее и попроще. В дальнейшем конечно хотелось бы функционал расширить, например передавать температуру в помещении, или например не фото а видео присылать, ну это уже мечты.

Может у кого то есть готовые наработки и он поделится, могу заплатить немного если нужно? В общем приму любую помощь.

фото днем и вечером https://itmages.ru/image/view/5711697/59f55459 https://itmages.ru/image/view/5711696/406cf949

  GNU nano 2.2.6                                  Файл: robotina.py                                                                         
""" A simple Telegram bot to get photos from a camera """
import cv2
import telepot
import time
TOKEN = "*****:********"
PHOTO = 'test.png'
CAM_PORT = 0
bot = telepot.Bot(TOKEN)
#def help_cmd(bot, update):
 #   text = ('/start command activates a motion capture mode.\n'
#            '/stop  command does the opposite.\n'
#            '/shot is used to get an actual snapshot.')
 #   bot.sendMessage(chat_id=update.message.chat_id, text=text)
#$config = {
#       cv2.CV_CAP_PROP_BRIGHTNESS: 50,
#       camera.CV_CAP_PROP_CONTRAST: 50,
#       camera.CV_CAP_PROP_SATURATION: 50,
#}
#for param, value in config.iteritems():
#       cv2.SetCaptureProperty(capture, param, value)
#
#
def take_photo():
    camera = cv2.VideoCapture(CAM_PORT)
#    camera.set(16,90)
    # Wait some time to get ligth in the camera
    time.sleep(1)
    rc, image = camera.read()
    if rc:
        cv2.imwrite(PHOTO, image)
    del(camera)
    return rc
def send_photo(chat_id, photo_path, caption):
    with open(photo_path, 'rb') as photo:
        bot.sendPhoto(chat_id, photo, caption)
def handle_messages(msg):
    """ The entry point to the message reception """
    content_type, chat_type, chat_id = telepot.glance(msg)
    print(content_type, chat_type, chat_id)
    if content_type == 'text':
        text = msg['text']
        if text == '/getphoto':
            if take_photo():
                send_photo(chat_id, PHOTO, 'This is a test caption')
            else:
                bot.SendMessage(chat_id, 'A problem occurred taking the photo')
        else:
            #error_msg = "No se de que me hablas!"
            error_msg = "I don't know what are you talking about!"
            bot.sendMessage(chat_id, error_msg)
bot.message_loop(handle_messages)
print('Listen messages...')
while True:
    time.sleep(5)
 

 , ,

Timuridze ()

Распарсить json по мере поступления данных

Хочется иметь стандартный интерфейс для выделения обьектов из потока вида:

data = socket.read(1024)
parser.feed(data)
objects = parser.get_objects()
for o in objects:
    process_object(o)

Есть ли такая возможность в стандартном json модуле питона? Я что-то сходу не нашёл.

TL;DR: нет в стандартной библиотеке, такой возможности нет, максимум, можно откусить от строки кусок, с помощью JSONDecoder.raw_decode, но докормить парсер в случае если в первый раз пришла только половина документа, возможности нет.

Сторонние реализации гугляться по запросу python json stream.

 ,

pon4ik ()

Запуск wsgi

нужно запустить простейшее приложение, хочу запустить без использования всяких flask/django/етс, но и без cgi

есть простейший код реализующий взаимодействие пользовательского приложения с вебсерверов

# wsgi.py
def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return open('/etc/passwd').read()

запускаю так

uwsgi -w  wsgi:application --http 0.0.0.0:8888
application отрабатывает, но в браузере ничего не передаётся

как запустить его запускать с помощью uwsgi?

 ,

fMad ()

PyQt5, QLineEdit передача информации в функцию..

Всем добрый вечер, возникла проблема с передачей информации из QLineEdit в функцию в другом .py файле. В строке вводится IP адрес, и этот адрес должен быть перенаправлен в функцию run,в переменную start_ip. (Функция run запускается при нажатии на кнопку Search) В функции run происходит проверка ip адреса, есть он в списке nodes или нет, если же нет, можно ли сделать так, чтобы выскакивало сообщение, что такого IP-адреса в списке нет?

import sys
from PyQt5.QtWidgets import (QMainWindow, QApplication, QLineEdit, QDesktopWidget, QMessageBox, QToolTip, QPushButton,
                             QAction, QLabel, QGridLayout, QWidget, QTextEdit, QFileDialog)
from PyQt5.QtGui import QIcon, QFont
from graph.run import run


class MyMainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)
        self.form_widget = FormWidget(self)
        self.setCentralWidget(self.form_widget)

        exitAction = QAction(QIcon('D:/Programming/Python/mo-mo/GUI/icon/exit.png'), '&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit')
        exitAction.triggered.connect(self.close)
        self.statusBar()
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)

        exitAction = QAction(QIcon('D:/Programming/Python/mo-mo/GUI/icon/exit.png'), 'Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.triggered.connect(self.close)

        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(exitAction)

        self.resize(500, 300)
        self.center()
        self.setWindowTitle('Spider')
        self.setWindowIcon(QIcon('D:/Programming/Python/mo-mo/GUI/icon/1.png'))
        self.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def closeEvent(self, event):
        reply = QMessageBox.question(self, 'Exit', "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


class FormWidget(QWidget):
    def __init__(self, parent):
        super(FormWidget, self).__init__(parent)
        QToolTip.setFont(QFont('SansSerif', 10))
        name = QLabel('Selected files:')
        file_vulnerability = QLabel('File vulnerability:')
        link_file = QLabel('Link file:')
        network_topology = QLabel('Network topology:')
        start_ip = QLabel('Start IP:')
        self.file_vulnerabilityEdit = QTextEdit()
        self.link_fileEdit = QTextEdit()
        self.network_topologyEdit = QTextEdit()
        start_ipEdit = QLineEdit()
        browse_1 = QPushButton("Display information", self)
        browse_2 = QPushButton("Display information", self)
        browse_3 = QPushButton("Display information", self)
        search = QPushButton("Search", self)
        grid = QGridLayout()
        grid.setSpacing(5)
        grid.addWidget(name, 0, 0)
        grid.addWidget(file_vulnerability, 1, 0)
        grid.addWidget(self.file_vulnerabilityEdit, 2, 0)
        grid.addWidget(browse_1, 3, 0)
        grid.addWidget(link_file, 1, 1)
        grid.addWidget(self.link_fileEdit, 2, 1)
        grid.addWidget(browse_2, 3, 1)
        grid.addWidget(network_topology, 1, 2)
        grid.addWidget(self.network_topologyEdit, 2, 2)
        grid.addWidget(browse_3, 3, 2)
        grid.addWidget(start_ip, 4, 0)
        grid.addWidget(start_ipEdit, 4, 1)
        grid.addWidget(search, 4, 2)

        self.setLayout(grid)
        self.show()

        search.clicked.connect(run)
        browse_1.clicked.connect(self.show1)
        browse_2.clicked.connect(self.show2)
        browse_3.clicked.connect(self.show3)
        start_ipEdit.textChanged[str].connect(self.start)

    def start(self, ip):

    def show1(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file', 'D:/Programming/Python/mo-mo/GUI')[0]

        f = open(fname, 'r')

        with f:
            data = f.read()
            self.file_vulnerabilityEdit.setText(data)

    def show2(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file', 'D:/Programming/Python/mo-mo/GUI')[0]

        f = open(fname, 'r')

        with f:
            data = f.read()
            self.link_fileEdit.setText(data)

    def show3(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file', 'D:/Programming/Python/mo-mo/GUI')[0]

        f = open(fname, 'r')

        with f:
            data = f.read()
            self.network_topologyEdit.setText(data)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    foo = MyMainWindow()
    foo.show()
    sys.exit(app.exec_())



Функция в которую нужно направить start IP:
def run():
    nodes = get_nodes()  # список узлов
    vulnerability_list = get_vulnerability()  # уязвимости
    nodes_info = get_nodes_info(nodes, vulnerability_list)  # инфа об узлах
    network_elements = get_network_elements()  # елементы нашей сети
    ne_info = get_network_elements_info(network_elements, nodes, nodes_info)  # информация об елементах нашей сети
    transition_matrix = create_transition_matrix(network_elements, ne_info)  # матрица переходов

    tm_for_graph = tm_from_str_to_int(transition_matrix)  # преобразуем матрицу переходов

    v_table = vulnerability_table(network_elements, ne_info)  # таблица с уязвимостями вида ip: права

    start_ip = ''
    flag = False
    count = 0
    while not flag and count < 3:
        start_ip = input('Введите ip: ')
        if count == 2:
            print('Это была последняя попытка!')
            return True
        elif nodes.count(start_ip) == 0:
            print('Такого узла не существует.')
            count += 1
        else:
            flag = True

    adjacency_matrix = graph_adjacency_matrix(start_ip, network_elements, v_table,
                                              transition_matrix)  # матрица смежности

    nodes_color = get_nodes_color(network_elements, adjacency_matrix, start_ip)  # получили цвет узлов

    draw_topology(tm_for_graph, network_elements, nodes_color, adjacency_matrix)  # рисуем результат
    return True

 , ,

Darkness ()

Ищем системного администратора Linux в IT компанию MFMSolutions

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

Чем нужно будет заниматься? Если коротко, то поддержкой и развитием производственных серверов и приложений, обеспечением мониторинга и бэкапированием.

Мы ищем человека, который: - глубоко знает и имеет большой практический опыт работы с ОС Linux и системами виртуализации (LXC, kvm и др.); - хорошо знает сетевые технологий, стек протоколов TCP/IP и принципы работы основных сетевых сервисов (DNS, DHCP, HTTP, SMTP, IMAP и др.) - хорошо владеет скриптовыми языками (bash/python/perl/ruby); - создавал и администрировал высоконагруженные проекты на apache, nginx, jetty, mysql;

Мы предлагаем: - приходить в офис, расположенный в 5 минутах ходьбы от м. Автозаводская, Москва; - парковать мото, вело или авто на охраняемой парковке; - работать в гибком графике; - официальное оформление по ТК РФ, белую зарплату выше рынка, ДМС, бесплатные чай, кофе, плюшки и другие приятные бонусы.

Всегда готова ответить на любые вопросы по почте egurzhieva@mfms.ru

Перемещено leave из general

 , , , ,

EkaterinaMFMS ()