Ответ 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() - это частой источник проблем безопасности. Не используйте его.