subprocess Используйте, например .:
import subprocess
# ...
subprocess.call(["echo", i])
Существует другая функция, как subprocess.call
: subprocess.check_call
. Это точно так же, как вызов, только что он выдает исключение, если команда, выполненная с возвратом с ненулевым кодом выхода. Это часто реализуемое поведение в сценариях и утилитах.
subprocess.check_output
ведет себя так же, как check_call
, но возвращает стандартный выход программы.
Если вам не нужны функции оболочки (например, расширения переменных, маски, ...), никогда не используйте оболочки = True (скорлупа = False по умолчанию). Если вы используете shell = True, то экранирование оболочки - это ваша работа с этими функциями, и они являются дырой в безопасности, если передаются неутвержденный ввод пользователя.
То же самое относится к os.system() - это частой источник проблем безопасности. Не используйте его.
Почему не рекомендуется использовать импорт os? –
@LuisRamonRamirezRodriguez, 'os.system()' обеспечивает меньший контроль, чем интерфейс 'subprocess.Popen' - что самое главное, он не предоставляет возможности передавать данные вне диапазона из кода (или для обеспечения литерального массива argv) , что затрудняет предотвращение уязвимостей оболочки. –
@ dom0, 'shell = True' - это неправильная вещь для вашего' subprocess.call (["echo", i], shell = True) 'example: скрипт оболочки, который запускается, является просто' echo', без аргументов, и 'i' передается в качестве аргумента в оболочку, на которую не ссылается скрипт. –