timeout
теперь поддерживается на call()
и communicate()
в модуле подпроцесса (как на Python3.3):
import subprocess
subprocess.call("command", timeout=20, shell=True)
Это вызовет команду и поднять исключение
subprocess.TimeoutExpired
, если команда не завершится через 20 секунд.
Затем вы можете обработать исключение, чтобы продолжить свой код, например:
try:
subprocess.call("command", timeout=20, shell=True)
except subprocess.TimeoutExpired:
# insert code here
Надеюсь, это поможет.
$ date -v -1d
-d устанавливает флаг Летнего времени.
дата человека Попытки большего количества информации
Команда Matthew упоминает работы для меня с/bin/date на Leopard. Кроме того, как Schwern указывает, если Вы уверены, что Ваш сценарий оболочки будет работавшим Mac OS X, почему Вы не хотите использовать Python или Ruby, это оба приезжают в стандарт в/usr/bin? Это никоим образом не влияло бы на мобильность в Вашем конкретном сценарии.
я понимаю, что мог сделать на скорую руку немного C или программу Ruby, чтобы сделать это, но я хочу, чтобы мой сценарий имел как можно меньше зависимостей.
Выполнение в C или поскольку сценарий Ruby привел бы к меньшему количеству зависимостей и был бы более межплатформенным.. Сценарии Bash просто называют различные другие сценарии/приложения, главным образом утилиты GNU.. Многие команды недоступны, или берут различные аргументы на других платформах (особенно между OS X и Linux)..
Ruby включен по умолчанию на Leopard OS X (и 10.4, и вероятно предыдущие версии, если я вспомню правильно), и если Вы будете использовать Rubys встроенные библиотеки даты, то он будет последовательно работать над любой платформой.
Каждый раз, когда Вы пытаетесь сделать что-либо удаленно сложное, Вы являетесь обычно лучшими из использования "надлежащего" языка сценариев!