Подтвердить что ты не робот

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

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

#!/bin/bash

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

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

4b9b3361

Ответ 1

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

import subprocess
# ...

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

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

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


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

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

Ответ 2

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

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

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

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

    subprocess.Popen(args ...)
    

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