centos 7 中的 fabric 运行:mkdir 在控制台中工作但在 fabfile.py 中不工作

fabric running in centos 7: mkdir working in console but not in fabfile.py

我的 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’

我的代码有什么问题?

我会说:当你可以使用 python 时,不要使用外部命令来创建目录。当您 运行 您的脚本时,该目录很可能出于某种原因存在。然后它被删除了。没关系。

为避免目录存在时失败,请在创建目录前测试是否存在。

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

便携且安全。