Как запустить команды bash внутри скрипта Python

Я пытаюсь запустить команды Python и bash в сценарии bash. В сценарии bash я хочу выполнить некоторые команды bash, заключенные в цикл Python:

#!/bin/bash python << END for i in range(1000): #execute‬ some bash command such as echoing i END 

Как я могу это сделать?

Используйте подпроцесс , например:

 import subprocess # ... subprocess.call(["echo", i]) 

Существует еще одна функция, такая как subprocess.call : subprocess.check_call . Это точно так же, как вызов, только что он выдает исключение, если команда, выполненная с возвратом с ненулевым кодом выхода. Это часто реализуемое поведение в сценариях и утилитах.

subprocess.check_output ведет себя так же, как check_call , но возвращает стандартный вывод программы.


Если вам не нужны функции оболочки (такие как расширение переменных, подстановочные знаки, …), никогда не используйте shell = True (по умолчанию используется shell = False). Если вы используете shell = True, то экранирование оболочки – это ваша работа с этими функциями, и они являются дырой в безопасности, если передаются неутвержденные входные данные пользователя.

То же самое относится к os.system () – это частой источник проблем безопасности. Не используйте его.

Посмотрите на модуль подпроцесса . Существует метод Popen и некоторые функции-обертки, такие как call .

  • Если вам нужно проверить вывод (получить строку результатов):

     output = subprocess.check_output(args ....) 
  • Если вы хотите дождаться завершения выполнения, прежде чем продолжить:

     exitcode = subprocess.call(args ....) 
  • Если вам нужна дополнительная функциональность, например, установка переменных среды, используйте базовый конструктор Popen:

     subprocess.Popen(args ...) 

Помните, что подпроцессом является модуль более высокого уровня. Он должен заменить устаревшие функции из модуля ОС.