Подождите, пока скрипт Python вернет 0

Я пытаюсь написать сценарий, который ожидает, когда база данных будет в сети. Скрипт, который проверяет соединение с базой данных, написан на python и должен вызываться каждые 5 секунд. Если скрипт возвращает 0, основной скрипт должен продолжаться.

Я никогда не писал в оболочке, поэтому я могу только догадываться, как привести сценарий python в состояние цикла while. Вот моя попытка, но я понятия не имею, как сделать это правильно.

Скрипт Python работает хорошо.

psqltest.py:

#!/usr/bin/python2.4
#
import psycopg2
try:
    db = psycopg2.connect("dbname='postgis' user='postgres' host='db' password='postgres'")
except:
    exit(1)

exit(0)

мой основной скрипт оболочки:

echo waiting for database...
while  [ python /root/psqltest.py && echo 0 || echo 1 ]
  do
     sleep 5
  done

сообщение об ошибке:

 1 ]

Спасибо за помощь мне

2 ответа

Решение

Сценарий оболочки будет просто

while ! python /root/psqltest.py; do
    sleep 5
done

или менее известный

until python /root/psqltest.py; do
    sleep 5
done

Я улучшил свои скрипты, теперь bash только вызывает скрипт на python и ждет его завершения, как упоминал Кристоф. Пока это работает, но я пытаюсь улучшить его еще больше.

#!/usr/bin/python3
#
import psycopg2
import time
import sys

db = None
sys.stdout.write('waiting ')
while db is None:
  try:
      db = psycopg2.connect("dbname='postgis' user='postgres' host='db' password='...'")
      db.close()
  except:
      sys.stdout.write('.')
  sys.stdout.flush()
  time.sleep( 5 )
print('')
exit(0)
Другие вопросы по тегам