from getpass import getpass
password = getpass()
Архивы автора: 1 1
Список таблиц в базе SQLite
select * from sqlite_master
where type = 'table'
Типы данных SQLite
NULL Значение — значение NULL.
INTEGER Значение представляет собой целое число со знаком, сохраненное в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величины значения.
REAL Значение представляет собой значение с плавающей запятой, которое хранится как 8-байтовое число с плавающей точкой IEEE.
TEXT Значение представляет собой текстовую строку, хранящуюся с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE)
BLOB Значение представляет собой блок данных, который хранится точно так же, как он был введен.
Notepad++: пример подстановки имени текущего файла в команду запуска
cmd.exe /k "$(FULL_CURRENT_PATH)"
Выполнение запросов к серверу MSSQL из *nix
$ tsql -S mydbserver -U mydomain\\user < script.sql
$ tsql -S myserver -D mydb -p 1433 -U mydomain\\user
Password:
типа выгрузка результатов запроса в .CSV
$ freebcp "select * from mytable where a=b" queryout sample.csv -U anoop -P mypassword -S hostname.com -D dbname -t , -c
Немного про Trac
В общих чертах
Веб-сервер для управления жизненным циклом программных продуктов. Позволяет придумать этапы разработки программы, создавать карточки с запланированными фичами и найденными ошибками, просматривать изменения в исходном коде репозитория, вести документацию. В движке реализованы тикеты с уникальными номерами, вики, поддержка плагинов (вставка макросов, изображений, рисование диаграмм, xmlrpc и т.д.), интеграция с Subversion.
По умолчанию движок работает без авторизации, но если надо, то прикручивается. В движке зашита система распределения прав доступа, можно использовать при настройке прав пользователей, можно ограничивать права при разработек новых модулей.
По состоянию на 2021 год, движок работал на устаревшем Python 2.7
Установка
Либо через pip, либо через менеджер пакетов в Linux. Есть и другие варианты. Есть версия под Windows.
Настройка
Конфигурация хранится в текстовых файлах. Из одних можно импортировать другие. Сначала объявляется имя секции, затем перечисляются имена параметров и их значения.
Запуск и остановка сервера
*nix
service tracd srart
service tracd stop
windows
В командной строке:
C:\Python27\Scripts\tracd.exe --port 8000 C:\trac_test
Остановить можно через Ctrl+C
Хранение данных
По умолчанию данные хранятся в файле БД sqlite — удобно для бэкапов, просто остановить сервер и скопировать файл. Как вариант можно перейти на PostgreSQL.
Детская игра в карточки на python
Детская игра в карточки, написана за один выходной
от 2 до 4 игроков
На каждой карточке 3 случайные цифры
Цифры у игроков сравниваются поочерёдно
У кого больше максимальных цифр, тот победил
Очки — количество побед
Игра запускается в консоли, но формирует html-страницу game.html,
которую можно открыть в браузере
Как играть
- зарускаем «python3 cards.py»
- вводим количество игроков
- вводим имена игроков
- нажимаем Enter после каждого хода —
компьютер «раздаёт» игрокам новые карточки
и смотрит, кто победил
Код игры cards.py:
#!/usr/bin/env python3
# -*-coding:utf-8;-*-
"""
Детская игра в карточки
https://kmsvsr.ru/wp-admin/post.php?post=1558
"""
from random import randint, sample
from os import listdir
# класс игрока
class Player:
"""Участник игры"""
def __init__(self, name):
"""Создание игрока"""
self.name = name
self.values = [0, 0, 0]
self.score = 0
def next_turn(self):
"""Следующий ход"""
for value_pos in range(3):
self.values[value_pos] = randint(1, 105)
def get_values_string(self):
"""Вернуть значения через пробел"""
return " ".join(
list(
map(str, self.values)
)
)
class HtmlPage:
"""Страница с игрой"""
def __init__(self):
"""Подготовка к формированию"""
self.content = ""
self.card_images = list(listdir("./cards"))
def clear(self):
"""Очистка содержимого страницы"""
self.content = ""
def update(self, game):
"""Обновление страницы"""
with open("game.html", "w", encoding="utf-8") as page_file:
self.content = """<!DOCTYPE>
<html>
<head>
<title>Карточки</title>
<!--meta http-equiv="content-type" content="text/html; charset=utf-8" /-->
<meta http-equiv="Refresh" content="3" />
<link rel="stylesheet" type="text/css" href="cards.css" />
</head>
<body>
<div class='game'>
"""
for player in game.players:
self.content += f"""
<div class='player'>
<h2 class='name'>{player.name}</h2>
<div class='score'>{player.score} очков</div>
<div class='card'>
<img src='cards/{sample(self.card_images, 1)[0]}'>
</div>
<div class='value value1'>{player.values[0]}</div>
<div class='value value2'>{player.values[1]}</div>
<div class='value value3'>{player.values[2]}</div>
</div>
"""
self.content += f"<div class='congrats'>Победитель - {game.last_winner}!</div>"
self.content += "</div><!--game--></body></html>"
page_file.write(self.content)
# игра
class Game:
"""Игра в карточки"""
def __init__(self):
"""Подготовка к игре"""
self.players = []
self.last_winner = ""
def get_last_winner(self):
"""Кто победил"""
return self.last_winner
def next_turn(self):
"""Следующий ход"""
values = [[], [], []]
for player in self.players:
player.next_turn()
print(f"Игрок {player.name}: {player.get_values_string()}")
values[0].append(player.values[0])
values[1].append(player.values[1])
values[2].append(player.values[2])
max_values = [
max(values[0]),
max(values[1]),
max(values[2])
]
max_value_wins = 0
for player in self.players:
player.value_wins = 0
for value_pos, _ in enumerate(player.values):
if player.values[value_pos] == max_values[value_pos]:
player.value_wins += 1
if player.value_wins > max_value_wins:
max_value_wins = player.value_wins
self.last_winner = ""
for player in self.players:
if player.value_wins == max_value_wins:
player.score += 1
self.last_winner += player.name
print(f"Победитель - {self.last_winner}!")
print("Результаты:")
for player in self.players:
print(f"{player.name}: {player.score} очков")
print("Игра в карточки")
g = Game()
# сколько игроков?
num_players = int(input("сколько игроков? (2 - 4): "))
if 1 < num_players <= 4:
# имена игроков
for i in range(0, num_players):
new_name = input(f"Введи имя игрока {i+1}: ")
g.players.append(Player(new_name))
while True:
print("Играем дальше...")
g.next_turn()
h = HtmlPage()
h.update(g)
input()
print("до новых встреч и всё такое")
Шаблончик cards.css:
html{
font-family: Verdana,Arial,sans-serif;
}
body{
background-color: #eeeeee; /* Цвет фона веб-страницы */
}
.player{
display:inline-block;
width: 200px;
}
.name{
font-size:30px;
}
.score{
font-size:30px;
}
.card{
height:250px;
width:200px;
box-shadow: 0 0 5px 2px;
}
.value{
display: inline;
font-size:30px;
font-weight:bold;
}
.value1{
color:blue;
}
.value2{
color:green;
}
.value3{
color:red;
}
.congrats{
font-size:30px;
font-weight:bold;
color:red;
}
Архив с игрой: Скачать
Python Base64 encode decode
import base64
a = base64.b64encode(bytes(u’complex string: ñáéíóúÑ’, «utf-8»))
# a: b’Y29tcGxleCBzdHJpbmc6IMOxw6HDqcOtw7PDusOR’
b = base64.b64decode(a).decode(«utf-8», «ignore»)
print(b)
# b :complex string: ñáéíóúÑ
ifconfig против ip
Некоторое время назад появилась команда /bin/ip. Но народ привык пользоваться более старой командой /sbin/ifconfig. Ну и типа дело идёт к тому, что скоро надо будет перейти с ifconfig на ip, вроде как потому что ip более мощная и делает то же самое.
Показать устройства и их конфигурацию:
ifconfig
ip addr show ip link show
Включить сетевое устройство:
ifconfig eth0 up
ip link set eth0 up
Отключаются устройства похожим образом:
ifconfig eth0 down
ip link set eth0 down
Присвоить IP-адрес:
ifconfig eth0 192.168.0.77
ip address add 192.168.0.77 dev eth0
Это была простая версия команды. Часто надо ещё указывать сетевую маску или broadcast-адрес. В следующих примерах показаны варианты для ifconfig и ip.
Нет необходимости говорить, что сетевая маска может быть указана в CIDR-нотации, вроде 192.168.0.77/24.
ifconfig eth0 192.168.0.77 netmask 255.255.255.0 broadcast 192.168.0.255
ip addr add 192.168.0.77/24 broadcast 192.168.0.255 dev eth0
Удаление IP-адреса:
ip addr del 192.168.0.77/24 dev eth0
Добавление алиаса:
ifconfig eth0:1 10.0.0.1/8
ip addr add 10.0.0.1/8 dev eth0 label eth0:1
ARP протокол
Add an entry in your ARP table.
arp -i eth0 -s 192.168.0.1 00:11:22:33:44:55
ip neigh add 192.168.0.1 lladdr 00:11:22:33:44:55 nud permanent dev eth0
Switch ARP resolution off on one device
ifconfig -arp eth0
ip link set dev eth0 arp off
Показать routing table
route
ip route show
Положительная особенность ip route в том, что можно запросить, через какой интерфейс пойдут пакеты к интересующему IP-адресу:
ip route get 192.168.88.77
Внесение изменений в routing table
Команды для добавления маршрута на интерфейс:
route add -net 192.168.3.0/24 dev eth3
ip route add 192.168.3.0/24 dev eth3
То же для удаления маршрута:
route del -net 192.168.3.0/24 dev eth3
ip route del 192.168.3.0/24 dev eth3
Команда для добавления шлюза:
route add -net 192.168.4.0/24 gw 192.168.4.1
ip route add 192.168.4.0/24 via 192.168.4.1
Можно добавить имя интерфейса, например eth3.
MSSQL Пример цикла по результатам запроса
DECLARE @mesto varchar(30);
DECLARE c CURSOR FOR SELECT mesto from MyPlaces
OPEN c
FETCH NEXT FROM c INTO @mesto
WHILE @@FETCH_STATUS = 0
BEGIN
select 'Здесь ' + @mesto
FETCH NEXT FROM c INTO @mesto
END
CLOSE c
DEALLOCATE c