fabri c работает в centos 7: mkdir работает в консоли, но не в fabfile.py - PullRequest
0 голосов
/ 12 марта 2020

У меня есть следующий код в моем fabfile.py (машина Centos 7):

def deploy(version):

    env.directory = os.path.join(env.config['home'], version, 've')
    env.activate = os.path.join(env.directory, 'bin/activate')
    env.version = os.path.join(env.config['home'],version)
    print('this is the home dir')
    print(env.config['home'])
    print(env.version)
    run('mkdir -v {}'.format(env.version))

При запуске я получил следующую ошибку:

[mcvitty] Executing task 'deploy'
this is the home dir
/home/mcvitty
/home/mcvitty/3.6.3
[mcvitty] run: mkdir -v /home/mcvitty/3.6.3
[mcvitty] Login password for 'webapp': 
[mcvitty] out: mkdir: cannot create directory ‘/home/mcvitty/3.6.3’: File exists
[mcvitty] out: 


Fatal error: run() received nonzero return code 1 while executing!

Requested: mkdir -v /home/mcvitty/3.6.3
Executed: /bin/bash -l -c "mkdir -v /home/mcvitty/3.6.3"

Но если я запускаю Виновная строка на консоли mkdir работает нормально:

/bin/bash -l -c "mkdir -v /home/mcvitty/3.6.3"
mkdir: created directory ‘/home/mcvitty/3.6.3’

Что не так с моим кодом?

1 Ответ

1 голос
/ 12 марта 2020

Я бы сказал: не используйте внешние команды для создания каталога, когда вы можете сделать это с помощью python. Скорее всего, каталог существует по какой-то причине, когда вы запускаете свой скрипт. Тогда это удалено. Не имеет большого значения.

Чтобы избежать сбоя, если каталог существует, просто протестируйте его, если он существует.

if not os.path.isdir(env.version):
   os.mkdir(env.version)
   print("Created directory {}".format(env.version)

Переносим и безопасен.

...