fabric - Ошибка «Команда (и) не найдена» при передаче аргументов в Eclipse (PyDev)? - PullRequest
0 голосов
/ 07 марта 2012

Я играл с Ткань .

С программой 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.

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

Извините, моя глупая ошибка.

Я новичок в Eclipse.

Моя структура исходного кода выглядит примерно так:

src/
├── hello.py
├── hello.pyc
├── hostname.py
├── hostname.pyc

Все файлы Python имеютСобственная конфигурация Run.Когда я открываю файл hostname.py и нажимаю кнопку воспроизведения (НЕ стрелку вниз), он фактически работает с конфигурацией hello, это является причиной вышеуказанных ошибок.

Создание новогоЗапуск Python: щелкните правой кнопкой мыши по файлу -> Запуск от имени -> Выполнить настройки -> щелкните правой кнопкой мыши по запуску Python -> Новый -> присвоив ему имя, выберите нужный проект и Основной модуль -> перейдите на вкладку Аргументы -> Установите $ {string_prompt} для аргументов программы, если хотите -> Применить и выполнить.

Для более позднего запуска вы можете просто выбрать правильную конфигурацию из стрелки вниз (рядом с кнопкой воспроизведения).

0 голосов
/ 07 марта 2012

Во-первых, нужно проверить, одинаков ли sys.path при запуске из одной версии в другую (т. Е. Импортировать sys; print ('\ n'.join (sorted (sys.path)))) и посмотреть, является ли это то же самое из командной строки для Eclipse / PyDev - если это не так, возможно, у вас есть какие-то проблемы в конфигурации вашего проекта внутри PyDev - то есть: может быть, исходная папка неправильно установлена?)

Если это не так, проверьте, совпадают ли переменные среды (то есть: если что-то работает из командной строки, а не из Eclipse, в 99% случаев это происходит из-за того, что некоторая конфигурация отличается от командной строки для Eclipse).

...