понедельник, 12 июля 2021 г.

Запуск скрипта python без указания программы транслятора

Скрипт Python можно запустить из командной строки Linux, например, таким образом:
# python3 script.py 

При этом файл script.py должен находиться в директории в которой находиться пользователь. В начале команды указывается интерпретатор, который должен обработать файл с программой. Но можно сделать скрипт исполняемым (chmod +x script.py) и добавить в начало файла специальную строчку описывающую, как исполнять программу данного файла. Эта строка должна начинаться с символов #!, которые вместе называются shebang (шебанг) и содержит путь к программе интерпретатора.
Например, первая строка может быть такой: #!/usr/bin/python3.

В этом случае запуск скрипта может выполняться так:
# ./script.py

После запуска скрипта таким образом часто возникает ошибка:
-bash: ./script.py: /usr/bin/python3^M: неверный интерпретатор: Нет такого файла или каталога
Это связано с тем, что символы переноса строки были созданы в ОС, отличной от Linux. В Linux в редакторе MCEDIT они отображаются так:

В Sublime Text 3 при использовании расширения RawLineEdit символы завершения строки отображаются так:

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

Установка и подключение к PostgreSQL в Debian 10

По умолчанию в Debian 10 из стандартных репозитариев устанавливается 11 версия PostgreSQL
$ sudo apt install postgresql
При этом создается пользователь postgres, от имени которого будет инициироваться запуск приложения. Учетная запись postgres создается как заблокированная для аутентификации в самой ОС и поэтому пароля не имеет.
Добавление PostgreSQL в автозагрузку и запуск сервиса:
$ sudo systemctl enable postgresql
$ sudo systemctl start postgresql

Сервер баз по умолчанию слушает localhost на порту 5432.
Логи сервера будут в файле - /var/log/postgresql/

Заходим от имени postgres в командную строку сервера базы данных
$ sudo -u postgres psql
В этом режиме под пользователем postgres меняются глобальные настройки всей СУБД (создаются пользователи, базы, выполняется репликация и пр.)

Просмотр всех созданных пользователей:
postgres=# \du
Создание нового пользователя, выдача ему прав на создание базы данных, установка пароля для пользователя:
postgres=# CREATE USER korolev;
postgres=# ALTER ROLE korolev CREATEDB;
postgres=# ALTER USER korolev with encrypted password '******';

Выход из клиента psql - CTRL+D
По умолчанию все созданные локальные пользователи имеют метод аутентификации – peer, то есть выполняется аутентификация средствами ОС и при подключении к СУБД из под одноименного пользователя ОС не потребуется введение пароля.
Это регулируется в файле  - /etc/postgresql/11/main/pg_hba.conf

Из оболочки ОС под пользователем korolev создаем базу данных с именем tet
$ createdb tet
Теперь созданная база данных может быть использована пользователем korolev.
Подключение к базе выполняется так:
$ psql -d tet
psql (11.12 (Debian 11.12-0+deb10u1))
Введите "help", чтобы получить справку.
tet=>

Пользователь, создавший базу данных может делать с ней все что захочет.

К базе данных можно подключиться с использованием библиотек языков программирования, например, с помощью библиотеки psycopg2 и Python.
Установка библиотеки psycopg2 для взаимодействия с базой данных:
$ sudo apt install python3-psycopg2
$ sudo apt install libpq-dev


Теперь можно использовать скрипт на Python для выполнения команд

#!/usr/bin/python3
#-*-coding: utf-8-*-

import psycopg2
conn = psycopg2.connect(dbname='tet', user='korolev', password='******', host='localhost')
cursor = conn.cursor()

cursor.execute('SELECT * FROM ats')
for row in cursor:
    print(row)

cursor.close()
conn.close()