Я играл с Ткань .
С программой Hello World:
def hello(name="world"):
print("hello %s!" % name)
if __name__ == '__main__':
import sys
from fabric.main import main
sys.argv = ['fab', '-f', __file__,] + sys.argv[1:]
main()
Я могу передать аргумент hello:name=quanta
и получить результат "hello quanta!".
Но с приведенным ниже сценарием:
from fabric.api import run
def hostname(host="localhost"):
run("hostname")
if __name__ == '__main__':
import sys
from fabric.main import main
sys.argv = ['fab', '-f', __file__,] + sys.argv[1:]
main()
Я получил ошибки:
Неустранимая ошибка: команда (и) не найдена:
имя хоста
Aborting.
при передаче hostname:host=192.168.3.118
в качестве аргумента в PyDev.
Работает нормально из командной строки:
$ fab -f hostname.py hostname:host=192.168.3.118
[192.168.3.118] Executing task 'hostname'
[192.168.3.118] run: hostname
[192.168.3.118] out: SVR040-3118.localdomain
[192.168.3.118] out:
Done.
Disconnecting from 192.168.3.118... done.
Это также происходит со словарем env
, примерно так:
from fabric.api import run, env
env.hosts = ['192.168.3.118', '192.168.6.142']
def hostname():
run("hostname")
if __name__ == '__main__':
import sys
from fabric.main import main
sys.argv = ['fab', '-f', __file__,] + sys.argv[1:]
main()
хотя запуск из командной строки дает ожидаемые результаты:
$ fab -f hostname.py hostname
[192.168.3.118] Executing task 'hostname'
[192.168.3.118] run: hostname
[192.168.3.118] out: SVR040-3118.localdomain
[192.168.3.118] out:
[192.168.6.142] Executing task 'hostname'
[192.168.6.142] run: hostname
[192.168.6.142] out: SVR040-6142
[192.168.6.142] out:
Done.
Disconnecting from 192.168.6.142... done.
Disconnecting from 192.168.3.118... done.