2014-12-05 3 views
0

В python Я пытаюсь выполнить fabfile, и я получаю следующую ошибку из вывода subproccess. Я установил ткань, используя легкую установку. Если я запускаю код из командной строки, он работает. Из python нет. Я предполагаю, что есть проблема с тем, как я использую команду Popen?Python не может быть выполнена из python с использованием подпроцесса

/bin/sh: 1: fab: not found 

Ниже, как я начинаю ткань из питона:

cmd = """fab -H 111.111.111.111 aws_bootstrap initial_chef_run:aws_server.json,aws-test,development -w """ 
os.chdir(fab_path) #change to the dir where the fabfile is located 
p = subprocess.Popen(cmd, shell=True,stderr=subprocess.STDOUT,stdout=subprocess.PIPE) 

PS Я добавил ниже к Popen, но получить ошибку ниже:

executable="/bin/bash" 

/bin/bash: fab: command not found 

Из командной строки я получаю ниже, что означает, что терминал может найти fab.

fab 

Fatal error: Couldn't find any fabfiles! 

Remember that -f can be used to specify fabfile path, and use -h for help. 

Aborting. 
+0

Использование команды execute - лучший вариант, чем вызов fabfile через popen. – tobltobs

+0

Я бы попытался удалить параметр 'stdout' - с этим тогда команда не должна выполняться немедленно (только когда вы должны были сделать что-то вроде call' p.communicate() ') – robjohncox

ответ

0

Попробуйте использовать весь путь для fab. Чтобы получить путь к fab в вашей системе, вы можете использовать which fab.

Однако, я не могу думать о какой-либо причине, почему вызова ФАБ из питона может быть лучше, чем при использовании execute функции ФАБ:

from fabric.tasks import execute 
import my_fabfile 

r = execute(my_fabfile.aws_bootstrap, hosts=["[email protected]%s" % '111.111.111.111]) 

Возвращаемое значение г будет содержать Dict с хозяевами в качестве ключа (с).

Смежные вопросы