LINUX.ORG.RU

106
Всего сообщений: 605

Wrapper над С++ для Python3

Прошу помощи в построении обертки для С++ кода и ее сборки с целью использования в Python3 скрипте.

Изложение моей попытки прилагается.

Имеется C++ класс Image:

$ cat image.h 
#include <opencv2/opencv.hpp>

class Image {
public:
    Image();
    int getWidth(cv::Mat);
    ~Image();
};

$ cat image.cpp 
#include "image.h"

Image::Image(){}
Image::~Image(){}
int Image::getWidth(cv::Mat img){return img.size().width;}

Для него создана Си обертка:

$ cat wrapper.cpp
#include <new>
#include "image.h"

extern "C" {

    void * createImage(void) {
        return new Image;
    }

    void deleteImage(void *ptr) {
        delete ptr;
    }

    bool getWidth(void *ptr, cv::Mat img){
	Image * ref = reinterpret_cast<Image*>(ptr);
        return ref->getWidth(img);
    }

}

Python3 скрипт имеет вид:

#!/usr/bin/python3
import cv2

from ctypes import cdll
cpplib = cdll.LoadLibrary('./wrapper.so')
filename="test.png"
img = cv2.imread(filename)
print(cpplib.getWidth(img))

Ну и наконец, правила сборки

wrapper.so: wrapper.o
	gcc -shared -o $@ $<

wrapper.o: wrapper.cpp image.o
	g++ -Wall -fPIC -O2 -c -o $@ $^  -lopencv_core

image.o: image.cpp
	g++ -Wall -fPIC -O2 -o $@ -c $<

Попытка запуска питоноского скрипта

./test.py 
Traceback (most recent call last):
  File "./test.py", line 5, in <module>
    cpplib = cdll.LoadLibrary('./wrapper.so')
  File "/usr/lib/python3.6/ctypes/__init__.py", line 426, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python3.6/ctypes/__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: ./wrapper.so: undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE

 , ,

doubletensor ()

OSError: [Errno 24] Too many open files

Всем привет!

У меня есть проблема в работе с моей Raspberry pi 4.

Скрипт на базе Python 3.7 + OpenCV3 падает раз в два дня.

В консоли выдается следующая ошибка:

Traceback (most recent call last): 
  File "people_counter.py", line 146, in <module> 
  File "people_counter.py", line 19, in send_osc 
  File "/home/pi/.virtualenvs/py3cv3/lib/python3.7/site-packages/osc4py3/as_eventloop.py", line 149, in osc_udp_client 
  File "/home/pi/.virtualenvs/py3cv3/lib/python3.7/site-packages/osc4py3/as_eventloop.py", line 230, in _select_monitor 
  File "/home/pi/.virtualenvs/py3cv3/lib/python3.7/site-packages/osc4py3/oscscheduling.py", line 167, in create_platform_socket_monitor 
  File "/home/pi/.virtualenvs/py3cv3/lib/python3.7/site-packages/osc4py3/oscscheduling.py", line 681, in init 
  File "/home/pi/.virtualenvs/py3cv3/lib/python3.7/site-packages/osc4py3/oscscheduling.py", line 612, in init 
  File "/home/pi/.virtualenvs/py3cv3/lib/python3.7/site-packages/osc4py3/oscscheduling.py", line 637, in create_monitor_sockets 
  File "/usr/lib/python3.7/socket.py", line 151, in init 
OSError: [Errno 24] Too many open files

Попробовал поднять лимиты:

ulimit -a

ulimit -a выдает такие конфиги:
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 28771
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 500000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 95
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 28771
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 , , , ,

zudva ()

python: как заставить pickle сохранять lambda функции

import pickle

class A:
   def __init__(self):
      self.__counter = count()
      self.__ids = defaultdict(lambda: next(self.__counter))
      self.processed_data = []

   def method1(self):
      # здесь используется __ids

   def method2(self):
      # здесь используется __ids

   def pickle_data(self, obj, filename="data.sav"):
      with open(filename, 'wb') as f:
         pickle.dump(obj, f)
      
   def unpickle_data(self, filename="data.sav"):
      with open(filename, 'rb') as f:
         return pickle.load(f)

my_class = A()
A.method1()
A.pickle_data(A)

pickle.dump() ругается что не может сохранить объект с lambda функцией:

AttributeError: Can't pickle local object 'Markov.__init__.<locals>.<lambda>'

Есть ли способ это решить?

 , , ,

cruz7 ()

Помогите разобраться в transmission rpc

Не могу разобраться в некоторых методах. На борту python 3.7, transmission 2.94, transmissionrpc (https://pythonhosted.org/transmissionrpc/) или transmission_rpc (https://transmission-rpc.readthedocs.io/en/latest/index.html).

Мне нужно переименовать корневой объект (файл) торрента после или в момент добавления. Как я вижу, для этого есть только rename_torrent_path(torrent_id, location, name, timeout=None) для уже существующего торрента. torrent_id - число, взять легко. location и name это путь и имя соответственно. Имя должно быть без пути, иначе

dirname = os.path.dirname(name)
    if len(dirname) > 0:
        raise ValueError("Target name cannot contain a path delimiter").
А вот путь как только я не указывал, и с именем файла и без, а вываливается ошибка, в т.ч. для логичного варианта типа rename_torrent_path(torrent_id, '/mnt/testlocation/testname.mkv', 'testname.mkv'):
transmission_rpc.error.TransmissionError: Query failed with result "Invalid argument".
К ней ведет вызов
args = {'path': location, 'name': name}
result = self._request(
    'torrent-rename-path', args, torrent_id, True, timeout=timeout)

...

if 'result' in data:
    if data['result'] != 'success':
        raise TransmissionError(
            'Query failed with result \"%s\".' % (data['result'])
        )
То есть аргументы не являются корректными, а более детально выяснить что и почему нельзя.

Сама функция переименования работает в программах, использующих transmission rpc, но раскопки их исходников пока не внесли ясности что именно я делаю не так. Если кто-то знает, просьба сообщить.

 , , ,

Lordwind ()

Очереди задач, потоки, мультипроцессы.

В общем. Есть такая проблема. Нужно сделать систему для распределенного выполнения задач. Причем, задачи эти крутятся долго - могут день, два. И могут добавлятся, так и удалятся.

И вопрос, каким образом лучше сделать такую систему? Характер задач - много общение с БД, сторонними REST API + обработка входящих данных от REST API - проверка по условиям приходящих данных. Те в большей мере IO, но и CPU также есть.

Сейчас есть с горем пополам работающее решение (писало чудо-юдо до меня). Решение состоит в том, чтобы на каждую задачу плодить thread… Сейчас среднее количество таких задач подошло к 150 и решение это работает… Откровенно х$%@#.. В общем, надо переделывать.

P.S Сам пока думаю о asyncio, или redis + multiprocessing + asyncio. Второе не особо нравится из-за нежелания бороться с пересозданием connection и т.п проблем. В идеале бы 1000 таких задач без проблем держать. Сейчас в одном интерпретаторе через потоки 150 и все стало очень медленно. По ресурсам CPU решение не критично. Есть сервер на 32 ядра. Можно грузить хоть все.

 , ,

crarkie ()

Неверно делается выборка из sqlite

Доброго времени!

Изучаю python, решил написать небольшой пет-проект - CLI менеджер задач. Работает добавление записи, удаление по ID, но не работает выборка по id.

@click.command()
@click.option('--i', type=int)
def showall(i):
    if i == True:
        params = (i)
        cursor.execute("SELECT * FROM tasks WHERE id = ?", params)
        print(cursor.fetchall())
    else:
        for row in cursor.execute("SELECT * FROM tasks ORDER BY id"):
            print(row)
    conn.close()

Вот этот кусок кода отвечает за выборку записи по id или всех записей, если параметр не задан(использую click). Все записи показывет, так же показывает запись с id если она первая в базе, если запись с id не первая, то почему-то выводит все записи.

 , ,

soulectro ()

Свои данные в Zabbix

Zabbix, cтоит задача, возможности ввода своих данных в уже существующие items. Я использую pyzabbix для отправки ZabbixMetric в zabbix, через zabbix sendor, для этого тип элемента данных установлен как Zabbix траппер, но в остальное время он должен получать данные с агента т.е стоять должен тип Zabbix-agent, можно ли, изменить через API тип, будет ли работать что-то вроде item.update({‘type’: 2}) для смены типа элемента данных?

 ,

BigQwerty93 ()

error: can't start new thread

Напоролся на такую ошибку в питоне:

error: can't start new thread


В питоне есть какое-то ограничение по потокам или это скорее всего исчерпание ресурсов сервера?

 ,

Qwentor ()

как установить tkinter?

помогите пожалуйста установить tkinter.

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

я делаю следующее:

(transaction1) md@md ~/.MINT18/code/python/transaction1 $ sudo apt-get install python-tk
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Предлагаемые пакеты:
  tix python-tk-dbg
Следующие НОВЫЕ пакеты будут установлены:
  python-tk
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 13 пакетов не обновлено.
Необходимо скачать 26,3 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 95,2 kB.
Пол:1 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python-tk amd64 2.7.12-1~16.04 [26,3 kB]
Получено 26,3 kB за 0с (84,0 kB/s)  
Выбор ранее не выбранного пакета python-tk.
(Чтение базы данных … на данный момент установлено 218287 файлов и каталогов.)
Подготовка к распаковке …/python-tk_2.7.12-1~16.04_amd64.deb …
Распаковывается python-tk (2.7.12-1~16.04) …
Настраивается пакет python-tk (2.7.12-1~16.04) …
(transaction1) md@md ~/.MINT18/code/python/transaction1 $ sudo apt-get install python-tk
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Уже установлен пакет python-tk самой новой версии (2.7.12-1~16.04).
Обновлено 0 пакетов, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 13 пакетов не обновлено.
(transaction1) md@md ~/.MINT18/code/python/transaction1 $ whereis python-tk
python-tk:
(transaction1) md@md ~/.MINT18/code/python/transaction1 $ which python-tk

судя по всему tkinter установился. теперь я пробую импортировать его в скрипт так:

import tkinter

но после запуска скрипта получаю следующую ошибку:

(transaction1) md@md ~/.MINT18/code/python/transaction1 $ python index3.py
Traceback (most recent call last):
  File "index3.py", line 3, in <module>
    import tkinter
ModuleNotFoundError: No module named 'tkinter'

ещё я пробовал делать так:

(transaction1) md@md ~/.MINT18/code/python/transaction1 $ pipenv install tkinter
Installing tkinter…
Adding tkinter to Pipfile's [packages]…
✔ Installation Succeeded 
Pipfile.lock (a21357) out of date, updating to (757436)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✘ Locking Failed! 
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/resolver.py", line 61, in resolve
[pipenv.exceptions.ResolutionFailure]:       return resolve_deps(
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 718, in resolve_deps
[pipenv.exceptions.ResolutionFailure]:       resolved_tree, hashes, markers_lookup, resolver = actually_resolve_deps(
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 480, in actually_resolve_deps
[pipenv.exceptions.ResolutionFailure]:       resolved_tree = resolver.resolve()
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 395, in resolve
[pipenv.exceptions.ResolutionFailure]:       raise ResolutionFailure(message=str(e))
[pipenv.exceptions.ResolutionFailure]:       pipenv.exceptions.ResolutionFailure: ERROR: ERROR: Could not find a version that matches threading
[pipenv.exceptions.ResolutionFailure]:       No versions found
[pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  First try clearing your dependency cache with $ pipenv lock --clear, then try the original command again.
 Alternatively, you can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: ERROR: Could not find a version that matches threading
No versions found
Was https://pypi.org/simple reachable?
[pipenv.exceptions.ResolutionFailure]:       return resolve_deps(
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 718, in resolve_deps
[pipenv.exceptions.ResolutionFailure]:       resolved_tree, hashes, markers_lookup, resolver = actually_resolve_deps(
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 480, in actually_resolve_deps
[pipenv.exceptions.ResolutionFailure]:       resolved_tree = resolver.resolve()
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 395, in resolve
[pipenv.exceptions.ResolutionFailure]:       raise ResolutionFailure(message=str(e))
[pipenv.exceptions.ResolutionFailure]:       pipenv.exceptions.ResolutionFailure: ERROR: ERROR: Could not find a version that matches threading
[pipenv.exceptions.ResolutionFailure]:       No versions found
[pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  First try clearing your dependency cache with $ pipenv lock --clear, then try the original command again.
 Alternatively, you can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: ERROR: Could not find a version that matches threading
No versions found
Was https://pypi.org/simple reachable?
(transaction1) md@md ~/.MINT18/code/python/transaction1 $ pipenv graph
matplotlib==3.1.2
  - cycler [required: >=0.10, installed: 0.10.0]
    - six [required: Any, installed: 1.13.0]
  - kiwisolver [required: >=1.0.1, installed: 1.1.0]
    - setuptools [required: Any, installed: 42.0.2]
  - numpy [required: >=1.11, installed: 1.17.4]
  - pyparsing [required: >=2.0.1,!=2.1.6,!=2.1.2,!=2.0.4, installed: 2.4.5]
  - python-dateutil [required: >=2.1, installed: 2.8.1]
    - six [required: >=1.5, installed: 1.13.0]
pandas==0.25.3
  - numpy [required: >=1.13.3, installed: 1.17.4]
  - python-dateutil [required: >=2.6.1, installed: 2.8.1]
    - six [required: >=1.5, installed: 1.13.0]
  - pytz [required: >=2017.2, installed: 2019.3]
psycopg2==2.8.4
redis==3.3.11

 , ,

prozaik ()

python asyncio.Lock и рекурсия

import asyncio

async def main():
    lock = asyncio.Lock()
    print("Sky")
    async with lock:
        print("Ground")
        async with lock:
            print("Hell")

asyncio.run(main())

Висит вечно, потом Ctrl+C:

 % python3 test.py
Sky
Ground
^CTraceback (most recent call last):
  File "test.py", line 11, in <module>
    asyncio.run(main())
  File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 566, in run_until_complete
    self.run_forever()
  File "/usr/lib/python3.7/asyncio/base_events.py", line 534, in run_forever
    self._run_once()
  File "/usr/lib/python3.7/asyncio/base_events.py", line 1735, in _run_once
    event_list = self._selector.select(timeout)
  File "/usr/lib/python3.7/selectors.py", line 468, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
KeyboardInterrupt

https://github.com/python/asyncio/issues/439

В яве такой хрени не встретишь. Но ява старенькая же, а тут новомодная асинхронность, зелёные до тошноты потоки и всё такое. Самое весёлое, что эта зараза даже ошибок не выбрасывает, и отладить такое «зависание» не очень просто.

 

subwoofer ()

python: как генерировать уникальные ID для элементов списка

Есть ли в стандартной библиотеке питона механизм генерации уникальных ID для последовательностей такого вида:

A-B-C-D
A-C-C-E
B-B-B-D
A-A-E-D

Нужно присваивать IDs каждому элементу, например A=0, B=1 и т.д. В данный момент я это делаю следующими функциями:

id = -1
ids = dict()

def getid():
    global id
    id += 1
    return id

def genid(s):
    global id
    if not s in ids:
       ids[s] = getid()
    return ids[s]

Я новичок в питоне, но этот код работает. Но - я подозреваю, что python имеет эффективные механизмы достичь этого более компактным способом? Наверняка есть что-то в библиотеке collections?

 ,

cruz7 ()

Появляется NoneType объект treeview path Gtk3 + Python3

Всем доброго времени суток. Не пойму появления «пустого» объекта treeview path при подключении treeview к сигналу 'cursor_changed'. При каждом первом (только первом) срабатывании функции по сигналу первая попытка получить treepath приводит к TypeError. Последующие уже нормально. Приходится либо через try либо через if отлавливать nonetype obj.

( читать дальше... )

( читать дальше... )

 , ,

ivsatel ()

Jython 3 roadmap is out-dated?

https://github.com/jython/jython3/releases

Что планируется на замену Jython для Python 3.x ?

Последние 4 года не было новых релизов.

 ,

BruteForceSSL ()

python: поясните применение метода setdefault() для словаря

Видел вот такой код:

s = ['a','b','c','d','a','a','a','b','c','b','b','b']

X = {}

for i in range(len(s)-1):
    X.setdefault((s[i], s[i+1]), [0])[0] += 1

Т.е. идем по списку и считаем переходы, a->b, b->c, c->c и так далее. Какя понимаю, setdefault() добавит значение по умолчанию, если ключ отсутствует в словаре. Но я не понимаю, почему default value список, в данном случае из одного элемента [0].

В чем необходимость использовать список в качестве счетчика, почему нельзя напрямую использовать целое для хранения? Например, вот такое тоже работает:

for i in range(len(states)-1):
   M.setdefault((states[i], states[i+1]), 0)
   M[(states[i], states[i+1])] += 1

Спасибо.

 ,

cruz7 ()

Хочется очень странного от Джанги

Шалом, уважаемые.

Начал я как-то углублённо Джангу изучать (о чём сейчас искренне сожалею) и в одном из учебных заданий вылезла бяка: есть следующие модели:

class Pizza(models.Model):
    name = models.CharField(null=False, max_length=200)
    dough = models.ForeignKey(Dough, on_delete=models.CASCADE, default=0)
    topping = models.ForeignKey(Topping, on_delete=models.CASCADE, default=0)
    price = models.DecimalField(max_digits=5, decimal_places=2, default=0)

    def __str__(self):
        return self.name

    def make_order(self, count):
        return InstancePizza.objects.create(name=self.name, price=self.price, pizza_template=self, count=count)


class InstancePizza(models.Model):
    pizza_template = models.ForeignKey(Pizza, related_name='pizza_template', on_delete=models.SET_NULL, null=True, blank=True)
    count = models.PositiveIntegerField(default=1)
    name = models.CharField(null=True, blank=True, max_length=200)
    price = models.DecimalField(max_digits=5, decimal_places=2, default=0, null=True, blank=True)
    
    def __str__(self):
        return 'name: {}, price: {}, full price: {}'.format(self.name, str(self.price), str(self.price * self.count))


class Order(models.Model):
    pizzas = models.ManyToManyField(InstancePizza, related_name='order_template')
    date = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    price = models.DecimalField(default=0, max_digits=7, decimal_places=2, null=True, blank=True)
    
    def __str__(self):
        return 'OrderID: {}, price: {}'.format(str(self.id), str(self.price))

    def get_price(self):
        pizzas = self.pizzas.all()
        price = 0
        for pizza in pizzas:
            price += pizza.price * pizza.count
        return price
    def change_order_price(self):
        user = self.user
        self.refresh_from_db()
        price = 0
        for instance_pizza in InstancePizza.objects.all().filter(order_template__user=user):
            price += instance_pizza.price * instance_pizza.count
            print('Print_____ ', price)
        self.price = price
        self.save()

суть проблемы в следующем: для обновления Order-а я использую вьюшку (на принты и прочий шлак прошу не обращать внимание :)):

class UpdateOrder(UpdateView):
	model = Order
	form_class = UpdateOrderForm
	template_name = 'update_order.html'
	success_url = '/basket/'

	def get_context_data(self, **kwargs):
		context = super().get_context_data(**kwargs)
		curent_order = Order.objects.filter(user=self.request.user)
		user = 0
		context['instances_pizzas'] = InstancePizza.objects.all().filter(order_template__user=self.request.user)
		return context

	def form_valid(self, form):
		curent_order = Order.objects.get(user=self.request.user)
		print('PRICE1', curent_order.price, curent_order.id)
		curent_order.change_order_price()
		Order.objects.filter(user=self.request.user).update(price=Order.objects.get(user=self.request.user).get_price())
		curent_order.change_order_price()
		print('PRICE3', curent_order.price, curent_order.pizzas, curent_order.id)
		order = Order.objects.get(id=1)
		order.price = 200
		order.save()
		print('EXAMPLE: ', order.order_template.all())
		print('PRICE 4', curent_order.price, curent_order.pizzas, curent_order.id)
		return super().form_valid(form)

которая НЕ ОБНОВЛЯЕТ ордер((

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

У кого нибудь есть предположения? Буду рад любым, т.к. сам я иссяк ((

 , ,

zad1ra ()

Подобрать структуру под данные

Кейс такой - есть цепочка сумматоров, у которого есть номер, к каждому сумматору подключены 1 или 2 микрофона (порт A и B).

Нужно получать данные микрофона как по его номеру, так и обратно - выяснять номер микрофона по известному номеру сумматора и его порту.

MICS = {
    1: {'summator': 8, 'mic': 'B'},
    2: {'summator': 9, 'mic': 'A'},
    3: {'summator': 10, 'mic': 'B'},
    4: {'summator': 10, 'mic': 'A'},
    5: {'summator': 1, 'mic': 'A'},
    6: {'summator': 1, 'mic': 'B'},
    7: {'summator': 2, 'mic': 'A'},
    8: {'summator': 2, 'mic': 'B'},
    ....
}

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

 ,

Turbid ()

подготовка видео данных для нейронной сети

Как правильно подготовить видео данные для нейронной сети? Понятно что видео это просто набор фото. Вопрос в том как правильно все сделать? Нейронная сеть будет CNN.

 , ,

ferz ()

Реализация быстрой проверки строки из файла в несколько гб

Обычный текстовый файл со строками, каким образом лучше будет его спарсить (в бд например), что бы без большой нагрузки проверять постоянно наличие в этом файле строки?

 ,

foozzi ()

Подскажите, как отобразить работу скрипта запущенного через systemctl?

Все привет

Моя система Ubuntu 18.04

У меня есть скрпт написанный на Python


while True:
      print("Привет мир")

Я добавил этот скрипт в service, что бы он запускался вместе с os

Если я выполняю в консоле

sudo systemctl status my-script.service 

то все отлично, и я вижу что мой скрипт работает

Но иногда мне хочеться посмотреть в консоле на цикл скрипта и убедиться что он выводит именно print(«Привет мир») Подскажите какя команда для это преднозначенна?

Спасибо

P/S поднимал данную тему на форуме ubuntu, но там пока что тишина =(

 ,

rofl ()

Как установить aiohttp?

У меня какая-то дичь творится с PIP. Кажется, я его правильно установил, но проблема в том, что не получается установить модуль aiohttp. Вот что пишет консоль:

md@md /var/lib $ sudo apt-get install python3-pip
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for md: 
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
  python-colorama python-distlib python-html5lib
Для их удаления используйте «apt-get autoremove».
Рекомендуемые пакеты:
  python3-wheel
Следующие НОВЫЕ пакеты будут установлены:
  python3-pip
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 24 пакетов не обновлено.
Необходимо скачать 0 B/80,3 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 447 kB.
Выбор ранее не выбранного пакета python3-pip.
(Чтение базы данных … на данный момент установлено 211733 файла и каталога.)
Preparing to unpack …/python3-pip_1.5.4-1ubuntu4_all.deb ...
Unpacking python3-pip (1.5.4-1ubuntu4) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Настраивается пакет python3-pip (1.5.4-1ubuntu4) …
md@md /var/lib $ pip --version
bash: /usr/bin/pip: No such file or directory
md@md /var/lib $ pip3 --version
pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)
md@md /var/lib $ python -m pip install aiohttp
Traceback (most recent call last):
  File "/usr/lib/python3.7/runpy.py", line 183, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/lib/python3.7/runpy.py", line 142, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/usr/lib/python3.7/runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 59, in <module>
    from pip.log import logger
  File "/usr/lib/python3/dist-packages/pip/log.py", line 9, in <module>
    import colorama, pkg_resources
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
  File "/usr/share/python-wheels/setuptools-3.3-py2.py3-none-any.whl/pkg_resources.py", line 1479, in <module>
    register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider)
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'
md@md /var/lib $ python --version
Python 3.7.0
md@md /var/lib $ python3 --version
Python 3.4.3
md@md /var/lib $ 

Помогите пожалуйста советом

 , , ,

prozaik ()