Как сломать цикл bash for изнутри скрипта python?

У меня есть цикл for, который итеративно 9X_bash-variables запускает скрипт Python. Внутри скрипта 9X_bash-script Python есть условие, выполнение которого 9X_.bashrc делает ненужным выполнение скрипта Python 9X_python-shell или даже цикла for. Например:

#Bash Script for i in {1..15}; do echo "Pre Outside ${i}" python minimal_test.py $i echo "Post Outside ${i}" done #Python script import sys import subprocess k = int(sys.argv[1]) end_bash = False if k == 7: end_bash = True print("Inside " + str(k)) if end_bash: bashCommand = "break" process = subprocess.Popen(bashCommand, stdout=subprocess.PIPE) 

Когда цикл 9X_bash i в сценарии bash == 6, а затем 7, программа 9X_bash-variables должна вывести:

PreOutside 6 PreInside 6 PostOutside 6 Pre Outside 7 Pre Inside 7 #The program must end here 

Однако я получаю следующую 9X_pythonista ошибку, и программа продолжает работать

File "/software/software/Python/3.9.5-GCCcore-10.3.0/lib/python3.9/subprocess.py", line 1821, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'break' 

Есть ли способ заставить 9X_bash-variables bash завершить цикл for из скрипта python?

4
0
1
Общее количество ответов: 1

Ответ #1

Ответ на вопрос: Как сломать цикл bash for изнутри скрипта python?

Сделайте так, чтобы ваш скрипт Python завершал 9X_bash-variables работу с ошибкой. Затем сценарий оболочки 9X_bash-script становится

for i in {1..15}; do python minimal_test.py "$i" || break done 

Другими словами, ваш скрипт Python 9X_python должен sys.exit(1) сигнализировать об ошибке оболочке 9X_bash (или любой вызывающей утилите). Точное число 9X_pythonic зависит от вас; любое ненулевое число является 9X_bash-function кодом отказа. (Диапазон 0–255, т. е. char без 9X_.bashrc знака.)

Запуск break в подпроцессе не имеет смысла; вы 9X_.bash-profile запускали новый экземпляр Bash, который 9X_pythonic не зависит от того, который запускает цикл, тот, в 9X_python котором, конечно, break не делает ничего полезного 9X_python-shell и фактически является просто синтаксической 9X_bash-function ошибкой в ​​отдельности.

13
0