Битва за идеальный рост, оказывается, бушует в мужских и женских генах. Герт Стульп, докторант из Университета Гронингена, показал, что этот конфликт приводит к разнице в репродуктивном успехе мужчин и женщин разного роста.
В исследовании, опубликованном в журнале Biology Letters, Герт Стульп пишет: «Естественный отбор все еще происходит среди людей, несмотря на контроль над рождаемостью и хорошее медицинское обслуживание». Вместе с коллегами из Гронингена, Амстердама и Кембриджа (Великобритания) ему удалось найти доказательства сексуального конфликта, который в настоящее время бушует в ДНК человеческой расы.
«Подобный конфликт возникает потому, что мужчины и женщины разные, и, следовательно, подвергаются различным давлениям отбора», ‒ объясняет Стульп. Оленю, например, выгодно иметь большие рога, но они были бы непрактичны для его самки. Природа «отключила» возможность роста рогов у самок, так что нет никакого конфликта между животными мужского и женского пола. Однако некоторые признаки, полезные для одного пола, но мешающие другому, не так-то легко «отключить».
Так обстоит дело с ростом у людей. Невысокие родители, как правило, производят таких же невысоких дочерей и сыновей. Это благоприятствует репродуктивному успеху дочерей, но не сыновей. «Мы знаем, что низкорослые женщины, по сравнению с женщинами среднего роста, имеют больше детей. У мужчин все наоборот. Много детей обычно имеют низкорослые женщины и мужчины среднего роста, так что их гены передаются в наибольшей степени.
Эта разница между полами в давлениях отбора может означать, что семьи, где супруги низкого роста, более успешны в производстве потомства благодаря женщинам, а семьи, где супруги среднего роста, производят больше детей благодаря мужчинам. Это известно как внутригенный сексуальный конфликт: определенный признак (в данном случае низкий или средний рост) является преимуществом для одного пола, но невыгодным для другого.
Возникает вопрос, присущ ли этот конфликт людям. Стульп исследовал, какое количество детей произвели братья и сестры, родившиеся в 1937 и 1938 годах, а также их потомки, воспользовавшись американской базой данных по штату Висконсин.
Оказалось, что, принимая во внимание рост только одного человека, можно предсказать, много или мало детей произведет родной брат или сестра этого человека. Низкорослый человек имеет больше шансов стать дядей или тетей благодаря своей сестре, в то время как люди среднего роста, скорее всего, будут иметь племянников и племянниц благодаря своему брату.
Но почему женщины низкого роста имеют больше детей, пока не ясно. Возможно, они вкладывают больше энергии в воспроизведение. Замечено, что чем раньше женщина произведет на свет первого ребенка, тем больше детей у нее будет. Женщина с генетической склонностью иметь детей в юном возрасте имеет также генетическую предрасположенность к низкому росту. Но какой бы ни была причина, эволюционные процессы, похоже, все еще активно проявляют себя в современном обществе, говорит ученый.
Думаю, что многие люди страдают от проблем с пищеварительной системой.
Для меня проблемы с желудком стали настоящей бедой. Боли не давали покоя очень часто. Кушать я мог только мягкие диетические продукты без всяких специй. От всего острого тут же скручивало желудок, причем в этом случае таблетки не помогали. Читать →
Скачивает один или более файлов с удалённого узла.
get возвращает итерируемый объект, содержащий абсолютные пути ко всем загруженным файлам, который будет пустым, если local_path будет объектом StringIO (ниже мы познакомимся со StringIO более подробно). Этот объект так же выставляет атрибут .failed, содержащий все удалённые пути, загрузка с которых не удалась, и .succeeded, эквивалентный not .failed.
remote_path — это удалённый файл или каталог для загрузки, который может использовать синтаксис подстановки оболочки, например, /var/log/apache2/*.log, и тильды будут замещены на удалённую домашнюю директорию. Относительные пути будут рассматриваться относительно домашнего каталога удалённого пользователя или текущего рабочего каталога, если используются в команде cd. Если удалённый genm указывает на каталог, то он будет рекурсивно скачан.
local_path — локальный путь, куда будут загружены файлы. Если путь относительный, он будет трактоваться относительно текущей рабочей директории. Он может быть построен при помощи стандартной вставки на основании словарей со следующими переменными:
host: Значение env.host_string, например, myhostname или user@myhostname-222 (двоеточие между именем узла и номером порта заменено на тире для увеличения совместимости с разными ФС)
dirname: Часть каталога из удалённого пути, т.е. src/projectname в /src/projectname/utils.py
basename: Часть файла из удалённого пути, т.е. utils.py в /src/projectname/utils.py
path: Полный удалённый путь: /src/projectname/utils.py
Примечание
Если remote_path — абсолютный путь, то только подкаталоги будут созданы локально и переданы в переменные выше. Так, например, get('/var/log','%(path)s') будет записывать файлы как apache2/access.log,postgresql/8.4/postgresql.log и т.д. в локальный рабочий каталог. Он не будет записывать файлы какvar/log/apache2/access.log.
Кроме того, когда скачивается один файл, %(dirname)s и %(path)s не имеют особого смысла и будут, соответственно иметь пустое значение и значение, равное %(basename)s. Таким образом, вызов вроде get('/var/log/apache2/access.log','%(path)s') сохранит локальный файл под именем access.log, а не var/log/apache2/access.log.
Такое поведение предназначено для соответствия программе командной строки scp.
Если значение не задано, то local_path получает значение "%(host)s/%(path)s" чтобы это было безопасно для использования на нескольких узлах.
Предупреждение
Если ваш аргумент local_path не содержит %(host)s и ваш вызов get запускается на нескольких хостах, ваши локальные файлы будут перезаписаны при каждом удачном запуске!
Если local_path не использует вышеозначенные переменные (т.е. это просто явный путь) он будет действовать похоже командам scp или cp, перезаписывая при необходимости существующие файлы, скачивая их в нужное место (т.е. get('/path/to/remote_file.txt', 'local_directory') создаст local_directory/remote_file.txt) и т.п.
local_path может быть и файлоподобным объектом, например, результатом open('path','w') или экземпляром StringIO.
Примечание
Попытка выполнить get каталога в файлоподобный объект некорректна и вернёт ошибку.
Примечание
Эта функция будет использовать seek и tell для перезаписи всего содержимого файлоподобного объекта, чтобы это соответствовало поведению put (который тоже использует весь файл). Однако, в отличие от put, указатель файла не будет восстановлен в предыдущую локацию, так как это достаточно бессмыслен
но и/или даже не возможно.
Примечание
Из-за того, как работают наши слои SSH, временные файлы всё равно будут записаны во временный файл на диске, даже если Вы передаёте в качестве аргумента local_path файлоподобный объект или StringIO. Временные файлы будут удалены, но имейте это в виду и не ожидайте прямой передачи данных в память. (Мы надеемся исправить это в будущем, чтобы дать возможность прямой передачи данных в память.)
Примечание
Если файлоподбный объект, такой как StringIO имеет атрибут name, он будет использован в выводе Fabric, вместо простого obj>
Изменения в версии 1.0: Теперь есть отдельный удалённый рабочий каталог, с которым работаетcd, и локальный рабочий каталог, с которым работает lcd.
Изменения в версии 1.0: Теперь можно использовать файлоподобные объекты в качестве аргументаlocal_path.
Изменения в версии 1.0: local_path может теперь содержать переменные genb и узла.
Изменения в версии 1.0: В аргументеremote_path можно использовать каталоги, которые будут рекурсивно загружены.
Изменения в версии 1.0: Возвращает итерируемый объект, содержащий локальные пути, содержащий атрибуты .failed и.succeeded.
Изменения в версии 1.5: Использует атрибутname файлоподобного объекта для вывода лога
local — это лишь оболочка вокруг использования встроенного модуля Python subprocess с shell=True. Если Вам надо сделать что-то особое — используйте модуль subprocess напрямую.
shell передаётся напрямую в аргумент executesubprocess.Popen‘а (что определяет используемую локально оболочку.) В соответствии со документацией, на Unix по умолчанию используется /bin/sh, так что эта опция полезна для установки других значений, например, /bin/bash.
local на данный момент не способен одновременно вводить и выводить информация, в отличие от run/sudo. Именованный аргумент capture позволяет переключаться между выводом и вводом при необходимости, значение по умолчанию — False.
Когда capture=False, локальные ввод и вывод subprocess’a направляется напрямую на ваш терминал, хотя Вы можете использовать глобальные настройки выводаoutput.stdout и output.stderr, чтобы спрятать один из них или оба. В этом режиме возвращаемые значения stdout/stderr всегда будут пустыми.
Если capture=True, то Вы не увидите никакого вывода на вашем терминале, но возвращаемое значение будет храниться в stdout/stderr.
В любом случае, как и при запуске run и sudo, возвращаемое значение содержит атрибуты return_code, stderr, failed и succeeded. Более подробно это описано в run.
local будет учитывать менеджер контекста lcd, позволяющий Вам контролировать текущий рабочий каталог вне зависимости от удалённого каталога (которым управляет cd).
Изменения в версии 1.0: Добавлены атрибутыsucceeded и stderr.
Изменения в версии 1.0: Теперь учитывает менеджер контекстаlcd.
Изменения в версии 1.0: Значение по умолчанию дляcapture изменено с True на False.
fabric.operations.open_shell(command=None)
Вызывает интерактивную оболочку на удалённой системе.
Если передан аргумент command, то он будет передан по каналу перед тем, как передать управление пользователю.
Эта функция чаще всего используется когда Вам нужно взаимодействовать с серьёзными командами оболочки или набором команд, например, при отладке или когда нужно провести полностью интерактивное восстановление при ошибке удалённой программы.
Следует иметь ввиду, что интерактивная оболочка в середине скрипта и не является замено
й команды run, которая тоже может взаимодействовать с удалённым хостом (хотя только во время выполнения переданной команды) и подразумевает решение большего количества программных проблем, таких как обработка ошибок и захват ввода/вывода.
Конкретнее, open_shell предоставляет больше интерактивности, чем run, использование полноценной удалённой оболочки не позволяет Fabric определить, завершилась ли программа с ошибкой и заполняет ввод/вывод вводом/выводом оболочки, таким как заставки входа, приглашения и т.д.
Таким образом, эта функция не имеет возвращаемого значения и не вызывает обработку ошибок Fabric, если какая-либо удалённая программа завершилась с ошибкой.
Выдаёт пользователю запрос с текстом text и возвращает полученное значение (как raw_input).
Для удобства к text будет добавлен одиночный пробел, ничего больше. Таким образом Вы можете завершить свой запрос вопросительным знаком или двоеточием, например prompt("Whathostname?").
Если указан key, ввод пользователя и будет сохранён как env. и возвращён этой функцией prompt. Если этот ключ уже существует в env, то его значение будет перезаписано и пользователю будет выдано предупреждение.
Если передан параметр default, то он будет выведен в квадратных скобках и будет использоваться в случае, если пользователь ничего не введёт (т.e. нажмёт Enter без ввода текста). По умолчанию значением default является пустая строка. Если значением является не пустая строка, то к нему будет добавлен пробел, так что вызов prompt("Каково имя узла?",default="foo") приведёт к отображению Каково имя узла?[foo] (с пробелом после [foo].)
Опциональный именованный аргумент validate может быть вызываемым объектом или строкой:
Если это вызываемый объект, то он будет вызван с полученной от пользователя строкой и должен вернуть значение для сохранения в случае успеха. При ошибке он должен вызвать исключение с сообщением, которое будет показано пользователю.
Если это строка, то значение, переданное в параметре validate используется как регулярное выражение. Поэтому рекомендуется использовать «сырые» строки. Обратите внимание, что регулярное выражение будет (в любом случае?) требовать полного совпадения.
В любом случае prompt будет перезапрашивать ввод от пользователя до тех пор, пока не пройдёт валидация (или пользователь не нажмёт Ctrl-C).
Примечание
prompt учитывает env.abort_on_prompts и будет вызывать abort вместо запроса, если этот флаг установлен в True. Если Вы хотите заблокировать ввод пользователя безусловно, но в этом случае запросить информацию у пользователя — оберните код при помощи settings.
Загружает один или более файлов на удалённый хост.
put возвращает итерируемый объект, содержащий абсолютные пути ко всем загруженным файлам. Этот итерируемый объект содержит также атрибут .failed, содержащий пути к локальным файлам, которые не удалось выгрузить (и потому его можно использовать для логической проверки.) Кроме того, Вы можете использовать .succeeded, который эквивалентен not.failed.
local_path может быть как относительным, так и абсолютным путём, или даже каталогом, может содержать символы подстановки оболочки, как они используются в модуле glob. Можно использовать и ~ (так же как в os.path.expanduser).
local_path может быть и файлоподобным объектом, как, например, результатом open('path') или экземпляром StringIO.
Примечание
В таком случае put постарается прочитать всё содержимое файлоподобного объекта, проматывая его при помощи seek (и будет использовать tell для сохранения предыдущей позиции файла).
Примечание
Использование файлоподобного объекта в команде put в аргументе local_path приведёт к удалению временного файла из-за нашей реалиации слоя SSH.
remote_path также может быть абсолютным или относительным путём, но применяется к удалённому узлу. Относительный genm трактуется относительно домашней директории удалённого пользователя, но, при необходимости, можно использовать и тильду (т.е. ~/.ssh/).
Пустая строка в качестве значения любого из двух аргументов пути будет замещена на текущий рабочий каталог.
Хотя протокол SFTP (который используется put) не имеет возможности загрузить файл в локацию, которая не принадлежит подключившемуся пользователю, Вы можете задать use_sudo=True, чтобы обойти это. При использовании этого параметра put загружает файлы во временный каталог на удалённом хосте и затем использует sudo для перемещения их в remote_path.
В некоторых случаях желательно чтобы загруженные файлы имели аналогичный режим, как и их локальные «коллеги» (например, когда Вы загружаете выполняемые скрипты). Для этого используйте mirror_local_mode=True.
В качестве альтернативы Вы можете использовать именованный аргумент mode для того, чтобы задать режим извлечения так же как и os.chmod или команда Unix chmod.
put учитывает результат cd, так что относительные пути в remote_path будут толковаться относительно текущего удалённого рабочего каталога, если это возможно. Таким образом, например, код ниже выгрузит файл в /tmp/files/test.txt а не в ~/files/test.txt:
withcd('/tmp'):
put('/path/to/local/test.txt','files')
Использование lcd будет влиять на local_path аналогичным образом.
Примеры:
put('bin/project.zip','/tmp/project.zip')
put('*.py','cgi-bin/')
put('index.html','index.html',mode=0755)
Примечание
Если файлоподобный объект, такой как StringIO, имеет атрибут name, то его значение будет использоваться в выводе Fabric, вместо стандартного obj>
Изменения в версии 1.0: Теперь учитывается удалённый рабочий каталог, управляемыйcd, и локальный рабочий каталог, управляемый lcd.
Изменения в версии 1.0: Теперь можно использовать файлоподобные объекты в аргументеlocal_path.
Изменения в версии 1.0: В аргументеlocal_path можно задать каталог, который будет рекурсивно выгружен на удалённый узел.
Изменения в версии 1.0: Возвращает итерируемый объект, содержащий удалённые пути с атрибутами.failed и.succeeded.
Изменения в версии 1.5: Позволяет использовать атрибут name файлоподобного объекта для вывода лога
fabric.operations.reboot(wait=120)
Перезагружает удалённую систему.
Временно изменяет настройки переподключения (timeout и connection_attempts) чтобы убедиться, что попытки подключения не прекратятся как минимум раньше wait секунд.
Примечание
По состоянию на Fabric 1.4, способность переподключиться в пределах сессии больше не требует использования внутреннего API. Хотя мы и не объявляем эту функцию нежелательной, тем не менее добавление к ней новых возможностей не стоит у нас в приоритетах.
Пользователи, желающие получить больше возможностей должны посмотреть исходники этой функции (6 хорошо задокументированных строк) и написать свою собственную адаптацию с различными значениями timeout/attempts или дополнительной логикой.
Появился в версии 0.9.2.
Изменения в версии 1.4: Изменен именованный аргументwait — ему добавлено значение по умолчанию.
fabric.operations.require(*keys, **kwargs)
Проверяет наличие переданных ключей в общем словаре окружения и прерывает выполнение, если их не находит.
Позиционными аргументами должны быть строки, определяющие то, какие переменные окружения должны быть проверены. Если какой-либо из этих переменных не существует, Fabric прервёт выполнение и выведен имена отсутствующих ключей.
Опциональный именованный аргумент used_for может быть строкой, которая будет отправлена на стандартный вывод, чтобы сообщить пользователю, для каких целей будет использоваться отсутствующая переменная. used_for выводится как часть строки вроде этой:
"Th(is|ese) variable(s) (are|is) used for %s"
Опциональный именованный аргумент provided_by может быть списком функций или имён функций, или одной функцией или её именем, которые должны быть выполнены для того, чтобы задать эти переменные; он будет включён в сообщение об ошибке.
Примечание: Подразумевается, что именованные аргументы применяются ко всем переданным ключам как к группе. Если Вам надо, например, указать для разных ключей разные used_for, Вы должны использовать несколько вызовов require().
Изменения в версии 1.1: Позволяет использовать итерируемые значенияprovided_by, а не одиночные значения.
Если shell=True (значение gj умолчанию), run выполнит заданную команду через оболочку, которая определяется переменной env.shell (в сумме получается что-то вроде /bin/bash-l-c"".) Все двойные кавычки (") или знаки доллара ($) в command будут автоматически экранированы, если shell=True.
run возвращает результирующий вывод выполнения удалённой программы в качестве одной (скорее всего состоящей из нескольких строк) строки. Эта строка будет иметь логические атрибуты failed и succeeded, определяющие успешно или нет была выполнена команда, а в атрибуте return_code Вы получите код возврата команды. Более того, он содержит копии запрошенной и реальной строки команды в аргументах .command и .real_command соответственно.
Любой текст, введённый в вашем локальном терминале будет перенаправлен в удалённую программу, пока она выполняется; таким образом Вы можете взаимодействовать удалённой программой, вводя пароли и т.п. Более подробно смотрите в разделе Взаимодействие с удалённой программой.
Вы можете задать pty=False чтобы не создавать псевдотерминал на удалённом хосте в том случае, если это создаёт проблемы для выполняемой команды. Но, таким образом, Fabric надо будет самому передавать весь ввод удалённой программе, в том числе и пароли. (Если pty=True, удалённый псеводтерминал бдует делать всё это сам.) Подробнее об этом в разделе Псевдотерминалы.
Конкретнее, если Вам нужно программно проверить поток вывода ошибок удалённой программы (доступный через атрибут stderr возвращаемого значения функции), Вы можете задать combine_stderr=False. В этом случае есть большая вероятность получения путанного вывода на вашем терминале (хотя возвращаемая run строка будет разделена надлежащим образом). Более подробно смотрите в разделе Комбинирование stdout и stderr.
Чтобы игнорировать ненулевой код возвращения задайте warn_only=True. Чтобы и игнорировать ненулевое возвращаемое значение и принудить команду выполняться тихо, задайте quiet=True.
Чтобы переопределить какие локальные потоки будут использованы для отображения удалённых stdout и/ил
и stderr, определите stdout или stderr. (По умолчанию используются потоковые объекты Python sys.stdout и sys.stderr.)
Например, run("command",stderr=sys.stdout) будет выводить удалённый поток ошибок в локальный поток вывода, сохраняя его как свой собственный атрибут возвращаемого значения (как выше). Или же Вы можете даже передать свой собственный потоковый объект или логировщик, например myout=StringIO();run("command",stdout=myout).
Примеры:
run("ls /var/www/")
run("ls /home/myuser",shell=False)
output=run('ls /var/www/site1')
Начиная с версии 1.0: Атрибутыsucceeded и stderr возвращаемого значения, именованный аргумент combine_stderr, и интерактивное поведение.
Изменения в версии 1.0: Значением по умолчанию pty теперь является True.
Изменения в версии 1.0.2: Значением по умолчанию combine_stderr теперь является None вместо True. Однако поведение по умолчан
Продолжаем тему декорирования ко Дню Святого Валентина и сегодня предлагаем вам достать все обрезочки и остатки фетра. Именно из фетра будем изготовлять сегодняшние поделки. Однако предлагаем отступить от традиционных розового и красного цветов и сшить сердечные украшения более спокойных натуральных оттенков – синего, серого, коричневого, бежевого. Однако вы можете выбрать ту цветовую гамму, которая вам по душе. Декоративные сердечки из фетра — сшить легко и быстро!