Модуль, который вам нужен - это подпроцесс .
Быстрое решение вашей проблемы - использовать модуль подпроцесса, например:
import subprocess
sp = subprocess.Popen(["/bin/bash", "-i", "-c", "nuke -x scriptpath"])
sp.communicate()
Это эквивалентно звонку:
nuke -x scriptpath
из оболочки bash. Флаг -i говорит bash вести себя так, как будто это интерактивный сеанс (и использовать файл ~ / .bashrc)
НО, вы должны быть очень осторожны, чтобы не открывать себя для каких-либо инъекций оболочки (например, если эта команда вызывается со страницы CGI)
Для быстрых уведомлений, которые пользователи вызывают непосредственно из оболочки, они, вероятно, не смогут нанести больше вреда, чем при обычном доступе к оболочке, но если этот сценарий вызывается веб-страницей, злоумышленник может передать что-то вроде " rm -dfr ~ / & "как программа. *
Если количество исполняемых файлов невелико, возможно, было бы лучше, если бы они назывались в сценарии:
PROGRAMS = {"nuke": "/path/to/nuke"
"foo" : "/path/to/foo" }
# Parse command line args
program = sys.argv[1]
sp = subprocess.Popen([PROGRAMS[program], "other", "arguments", "to", "program"])
* Это может работать не совсем так, но вы поняли