2016-06-27 6 views
0

Написал скрипт python, который выполняет задачу, которая может работать в течение нескольких часов. Поскольку он связывается с удаленным сервером, сценарий может выйти из строя, если есть ошибка подключения. То, что я хотел бы сделать, - это возобновить его, если его код выхода не равен 0. Возможно ли это с помощью bash?bash - Как продолжить запуск программы до ее выхода с 0

Некоторые псевдо-C, если моя формулировка не ясна:

int exitcode; 
do 
{ 
    exitcode = MyPythonScript(); 
} while (exitcode != 0); 
+0

Вместо перезапуска программы из bash вы должны поймать ошибку соединения в программе python и снова подключиться. – hek2mgl

+0

@ hek2mgl, я абсолютно согласен, что это было бы гораздо лучшим решением. Однако код, который делает сетевой материал, не мой, я просто вызываю функцию из lib. Это делает меня неуверенным, могу ли я что-нибудь сделать с ошибкой соединения без изменения самой lib. –

ответ

2
until MyPythonScript 
do 
    : Nothing 
done 

Это выходит, когда команда выходит с истинным (успех) статуса. Вы можете поместить спать, или сообщить об ошибке, или что-нибудь еще, что вы хотите в теле цикла вместо команды «ничего не делайте, но всегда преуспевайте» :. Конечно, вы можете добавлять аргументы к скрипту (и перенаправления ввода-вывода и т. Д.).

+0

Супер элегантное решение! – hek2mgl

+2

Вместо ': Nothing' (это действительно просто': 'с отброшенным аргументом) вы также можете спать (например,' sleep 10' спать в течение 10 секунд), что часто является хорошей идеей, чтобы избежать спама в сети и впустую процессорные циклы. – Taywee

+0

Удивительный, спасибо! –