- Разметка уровня параграфа
- Разметка содержания
- Словарь
- Отображение формальной грамматики
- Показ примеров кода
Автор: Ishayahu Lastov
В последнее время я работаю над запуском процессов в tulip: PEP 3156 и реализация на гуглокоде
Базовые конструкции выглядят так:
Транспорт:
class BaseTransport:
"""Base ABC for transports."""
def get_extra_info(self, name, default=None):
"""Get optional transport information."""
def close(self):
"""Closes the transport.
Buffered data will be flushed asynchronously. No more data
will be received. After all buffered data is flushed, the
protocol's connection_lost() method will (eventually) called
with None as its argument.
"""
class SubprocessTransport(BaseTransport):
def get_pid(self):
"""Get subprocess id."""
def get_returncode(self):
"""Get subprocess returncode.
See also
http://docs.python.org/3/library/subprocess#subprocess.Popen.returncode
"""
def get_pipe_transport(self, fd):
"""Get transport for pipe with number fd."""
def send_signal(self, signal):
"""Send signal to subprocess.
See also:
http://docs.python.org/3/library/subprocess#subprocess.Popen.send_signal
"""
def terminate(self):
"""Stop the subprocess.
Alias for close() method.
On Posix OSs the method sends SIGTERM to the subprocess.
On Windows the Win32 API function TerminateProcess()
is called to stop the subprocess.
See also:
http://docs.python.org/3/library/subprocess#subprocess.Popen.terminate
"""
def kill(self):
"""Kill the subprocess.
On Posix OSs the function sends SIGKILL to the subprocess.
On Windows kill() is an alias for terminate().
See also:
http://docs.python.org/3/library/subprocess#subprocess.Popen.kill
"""
Протокол:
class BaseProtocol:
"""ABC for base protocol class.
Usually user implements protocols that derived from BaseProtocol
like Protocol or ProcessProtocol.
The only case when BaseProtocol should be implemented directly is
write-only transport like write pipe
"""
def connection_made(self, transport):
"""Called when a connection is made.
The argument is the transport representing the pipe connection.
To receive data, wait for data_received() calls.
When the connection is closed, connection_lost() is called.
"""
def connection_lost(self, exc):
"""Called when the connection is lost or closed.
The argument is an exception object or None (the latter
meaning a regular EOF is received or the connection was
aborted or closed).
"""
class SubprocessProtocol(BaseProtocol):
"""ABC representing a protocol for subprocess calls."""
def pipe_data_received(self, fd, data):
"""Called when subprocess write a data into stdout/stderr pipes.
fd is int file dascriptor.
data is bytes object.
"""
def pipe_connection_lost(self, fd, exc):
"""Called when a file descriptor associated with the child process is
closed.
fd is the int file descriptor that was closed.
"""
def process_exited(self):
"""Called when subprocess has exited.
"""
Нужные методы в event loop:
class AbstractEventLoop:
"""Abstract event loop."""
def subprocess_shell(self, protocol_factory, cmd, *, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
**kwargs):
"""Run cmd in shell"""
def subprocess_exec(self, protocol_factory, *args, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
**kwargs):
"""Subprocess *args"""
Т.е. интерфейс запуска процесса почти повторяет subprocess.Popen за исключением того, что subprocess.PIPE теперь вариант по умолчaнию. Заодно еще избавляемся от кошмара с правильным использованием shell=True (см. пост на эту тему). Поддерживаются только байтовые потоки, как и везде в tulip.
Оно уже в целом работает на Unix, код для Windows тоже готовится.
Делает всё что можно и нужно за исключением TTY. C TTY ван Россум предложил пока не связываться, да и subprocess его не поддерживает.
Рабочие транспорты и протоколы — это, конечно, классно. Вполне подходящий низкоуровневый строительный блок.
Но простому программисту хочется иметь что-то более удобное и привычное.
Для tulip это должен быть код на основе yield from.
Проблема в том, что для процессов мы имеем не один поток ввода-вывода, а три однонаправленных: stdin, stdout и stderr. А еще процесс может сам решить закрыться, и это тоже нужно удобно обрабатывать.
Я пытался придумать что-то такое, но результат пока мне не нравится.
Может, кто сумеет посоветовать дельную конструкцию? Или указать на готовую библиотеку, у которой можно поучиться?
Автор: Andrew Svetlov

Это оригинальное украшение сможет сделать даже подросток. Оно прекрасно подойдет для тех, кто ежедневно носит деним и одевается в стиле casual. Итак, браслет из молнии своими руками – тема сегодняшней статьи.
Приветствую! В этой статье я хочу рассказать, как автоматизировать процесс добавления анонсов статей в такие социальные сети, как Твиттер и Фейсбук через Twitterfeed.com. Как известно, анонс только что опубликованной статьи в социальных сетях ускоряет ее индексацию поисковыми роботами. Для молодых сайтов крайне важно добиться быстрой индексации. В первую очередь для того, чтобы никто не скопировал у Вас статью и не разместил у себя на сайте. Если на сайте, укравшем у Вас статью, она проиндексируется раньше, то он будет считаться первоисточником.
Можно вручную добавлять анонсы новых статей, нажимая на кнопки соцсетей. Надеюсь Вы добавили их себе на сайт. Если нет, то почитайте эту статью с подробной инструкцией. Или же воспользоваться бесплатным сервисом для автоматического кросспостинга Twitterfeed.com.
Первым делом необходимо зарегистрироваться. Перейдите на сайт и вверху нажмите на ссылку sign up.
Сразу после регистрации Вам предложат настроить трансляцию RSS-ленты в соцсети.
Укажите любое название, адрес RSS. Для настройки дополнительных опций кликните по Advanced Settings.
В раскрывшемся дополнительном меню Advanced Settings, обратите внимание на следующие пункты:
Другие настройки не имеют существенного значения и их можно не трогать.
Переходим ко второму шагу. Выбор социальной сети:

Я покажу на примере Твиттера. Для Facebook все аналогично. Нужно авторизоваться с помощью twitter. Как только связь будет установлена, нажмите внизу на кнопку для продолжения. Теперь можно добавить трансляцию RSS-ленты в Фейсбук, или завершить. Нажмите внизу на кнопку All Done!, чтобы сохранить. В любой момент можно отредактировать настройки или удалить ленту.
Можно настроить кросспостинг одной и той же ленты в несколько аккаунтов соцсетей. Или подключить еще одну RSS-ленту.
В одной из следующих статей я расскажу как настроить трансляцию анонсов в Твиттер в самом фиде. А с Твиттера в Фейсбук. Подпишитесь на обновления, чтобы не пропустить.
Сода есть в доме у каждой хозяйки и на фоне сумбурной шумихи в интернете многих интересует вопрос: «Эффективна ли пищевая сода для похудения, отзывы о которой столь противоречивы?» Я, как кандидат медицинских наук, могу с уверенностью сказать, что похудение с помощью соды возможно за счет обезвоживания, но это никак не скажется на жировой прослойке и фигуре в целом.
Длинным волосам и уход должный, и внимание особенное. А внимание это, как правило, заключается в различных прическах и разного рода украшениях для волос. И каждый день хочется быть такой разной и неповторимой. Так и разориться недолго! Не разоритесь, если покупные украшения для волос будете чередовать с украшениями хэндмэйд. Как сделать украшение для волос своими руками – постараемся снова вас вдохновить!