os.path.dirname(os.path.abspath(__file__))
Архивы автора: 1 1
python3 xmlrpc
import xmlrpc.client as xc
client = xc.Server('http://' + host + ':' + port + '/RPC2')
client.supervisor.getState()
client.supervisor.getProcessInfo('process name')
>>> import xmlrpc.client as xc
>>> client = xc.Server("http://127.0.0.1:8000/trac_test/rpc")
>>> client.system.listMethods()
python ввод пароля
from getpass import getpass
password = getpass()
Список таблиц в базе 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: ñáéíóúÑ
