time

Запуск внешних приложений в Python

python-run.gif Для запуска любой внешней команды или программы под python используется os.system("path/to/program")

Например:

import os
os.system('/usr/bin/firefox')

Выше приведенный пример здорово работает если только в пути нету пробелов (например, ‘Mozilla Firefox’).

Для того, что бы командная оболочка правильно трактовала имена с пробелами необходимо их экранировать в кавычки, например так:

import os
os.system(r'c:/"Program Files"/"Mozilla Firefox"/firefox.exe')

Если не знать как правильно передать путь в os.system то можно долго провозится, ломая голову почему оно не хочет запускать программы.

Для упрощения запуска команд, в пути которых есть пробелы, существует os.startfile:

import os
os.startfile(r'c:/Program Files/Mozilla Firefox/firefox.exe')

os.startfile принимает простой текст, без необходимости заключать в кавычки имена папок с пробелами.

Еще два варианта (источник), каждый хорош в своем случаи

import subprocess
import shlex

cmd = 'ls -al'
args = shlex.split(cmd)
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
result = p.communicate()[0]

или

import commands    
commands.getoutput('ls -la')

Начиная с версии 3 и выше запуск рекомендуется производить через subprocess.

import subprocess
proc = subprocess.Popen("ping -c2 %s" % ip, shell=True, stdout=subprocess.PIPE)
out = proc.stdout.readlines()
# или
out = proc.communicate()

blog comments powered by Disqus