等待python脚本返回0

等待python脚本返回0,python,sh,Python,Sh,我正在尝试编写一个脚本,等待数据库联机。 检查数据库连接的脚本是用python编写的,应该每5秒激活一次。如果脚本返回0,则主脚本应继续 我从未在shell中编写过代码,因此我只能猜测如何将python脚本置于while循环中。这是我的尝试,但我不知道如何做对 python脚本运行良好 psqltest.py: #!/usr/bin/python2.4 # import psycopg2 try: db = psycopg2.connect("dbname='postgis' user=

我正在尝试编写一个脚本,等待数据库联机。 检查数据库连接的脚本是用python编写的,应该每5秒激活一次。如果脚本返回0,则主脚本应继续

我从未在shell中编写过代码,因此我只能猜测如何将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)
我的主shell脚本:

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

 1 ]

感谢您的帮助

我已经改进了我的脚本,现在bash只调用python脚本并等待它完成,正如Kristof提到的那样。到目前为止,这是有效的,但我试图进一步改进它

#!/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)

我已经改进了我的脚本,现在bash只调用python脚本并等待它完成,正如Kristof所提到的。到目前为止,这是有效的,但我试图进一步改进它

#!/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)

shell脚本将是

while ! python /root/psqltest.py; do
    sleep 5
done
或者是鲜为人知的

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

shell脚本将是

while ! python /root/psqltest.py; do
    sleep 5
done
或者是鲜为人知的

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

OT,但是你有充分的理由使用python 2.4吗?不太可能,我想我也可以使用python 3。用python编写循环代码,并在连接成功时让它将控制权返回到shell脚本不是更容易吗?请在要求人调试你的代码之前尝试一下。OT,但是你有充分的理由使用python 2.4吗?不太可能,我想我也可以使用python 3。用python编写循环代码,并在连接成功时让它将控制权返回到shell脚本不是更容易吗?请在要求人类调试代码之前尝试一下。