Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 结构设置问题()_Python_Fabric - Fatal编程技术网

Python 结构设置问题()

Python 结构设置问题(),python,fabric,Python,Fabric,运行Fabric的最新版本(1.11.1)(Paramiko(1.16.0)、Python(2.7.11))时,我遇到了一个最奇怪的错误,我做了一些概念验证来尝试它 from fabric.api import run, sudo, task from fabric.context_managers import settings @task def test(): print('regular run') run('whoami') print('regular

运行Fabric的最新版本(1.11.1)(Paramiko(1.16.0)、Python(2.7.11))时,我遇到了一个最奇怪的错误,我做了一些概念验证来尝试它

from fabric.api import run, sudo, task
from fabric.context_managers import settings


@task
def test():
    print('regular run')
    run('whoami')

    print('regular sudo')
    sudo('whoami')

    print('sudo with user arg')
    sudo('whoami', user='www-data')

    with settings(user='www-data'):
        print('run inside settings')
        run('whoami')
输出:

$ fab -f test.py -H vagrant@127.0.0.1:2222 test
[vagrant@127.0.0.1:2222] Executing task 'test'
regular run
[vagrant@127.0.0.1:2222] run: whoami
[vagrant@127.0.0.1:2222] out: vagrant        # <--- good
[vagrant@127.0.0.1:2222] out: 

regular sudo
[vagrant@127.0.0.1:2222] sudo: whoami
[vagrant@127.0.0.1:2222] out: root           # <--- good
[vagrant@127.0.0.1:2222] out: 

sudo with user arg
[vagrant@127.0.0.1:2222] sudo: whoami
[vagrant@127.0.0.1:2222] out: www-data       # <--- good
[vagrant@127.0.0.1:2222] out: 

run inside settings
[vagrant@127.0.0.1:2222] run: whoami
[vagrant@127.0.0.1:2222] out: vagrant        # <--- WHAT THE HECK!? this used to work
[vagrant@127.0.0.1:2222] out: 


Done.
$ fab -f test.py -H vagrant@127.0.0.1:2222 test
[vagrant@127.0.0.1:2222] Executing task 'test'
regular run
[vagrant@127.0.0.1:2222] run: whoami
[vagrant@127.0.0.1:2222] out: vagrant        # <--- good
[vagrant@127.0.0.1:2222] out: 

regular sudo
[vagrant@127.0.0.1:2222] sudo: whoami
[vagrant@127.0.0.1:2222] out: root           # <--- good
[vagrant@127.0.0.1:2222] out: 

sudo with user arg
[vagrant@127.0.0.1:2222] sudo: whoami
[vagrant@127.0.0.1:2222] out: www-data       # <--- good
[vagrant@127.0.0.1:2222] out: 

run inside settings
[vagrant@127.0.0.1:2222] run: whoami
[vagrant@127.0.0.1:2222] out: www-data       # <--- good
[vagrant@127.0.0.1:2222] out: 


Done.
$fab-f test.py-Hvagrant@127.0.0.1:2222测试
[vagrant@127.0.0.1:2222]正在执行任务“测试”
常规跑步
[vagrant@127.0.0.1:2222]run:whoami

[vagrant@127.0.0.1:2222]out:vagrant#另一个织物问题,如果你做一些可爱的事情,比如:
-Hvagrant@127.0.0.1:2222
在内部,它不会将其分解为您所期望的:
env.user='vagrant';env.host='127.0.0.1';env.port='2222'
但它只是将其保存在主机字符串中。所以啊,这是世界上最丑的黑客:

这有助于保持代码相当“干净”,并且不会有一堆带有设置的
(host_string='www-data@'+env.host_string.split('@')[1]):
到处都是,只有在定义fabric命令(如:
fab.)时,它们才会断开--user=vagrant--host=127.0.0.1--port=2222
。此解决方案适用于以下情况:

fab-f test.py--user=vagrant--host=127.0.0.1--port=2222 test

fab-f test.py-Hvagrant@127.0.0.1:2222测试


老办法

输出:

$ fab -f test.py -H vagrant@127.0.0.1:2222 test
[vagrant@127.0.0.1:2222] Executing task 'test'
regular run
[vagrant@127.0.0.1:2222] run: whoami
[vagrant@127.0.0.1:2222] out: vagrant        # <--- good
[vagrant@127.0.0.1:2222] out: 

regular sudo
[vagrant@127.0.0.1:2222] sudo: whoami
[vagrant@127.0.0.1:2222] out: root           # <--- good
[vagrant@127.0.0.1:2222] out: 

sudo with user arg
[vagrant@127.0.0.1:2222] sudo: whoami
[vagrant@127.0.0.1:2222] out: www-data       # <--- good
[vagrant@127.0.0.1:2222] out: 

run inside settings
[vagrant@127.0.0.1:2222] run: whoami
[vagrant@127.0.0.1:2222] out: vagrant        # <--- WHAT THE HECK!? this used to work
[vagrant@127.0.0.1:2222] out: 


Done.
$ fab -f test.py -H vagrant@127.0.0.1:2222 test
[vagrant@127.0.0.1:2222] Executing task 'test'
regular run
[vagrant@127.0.0.1:2222] run: whoami
[vagrant@127.0.0.1:2222] out: vagrant        # <--- good
[vagrant@127.0.0.1:2222] out: 

regular sudo
[vagrant@127.0.0.1:2222] sudo: whoami
[vagrant@127.0.0.1:2222] out: root           # <--- good
[vagrant@127.0.0.1:2222] out: 

sudo with user arg
[vagrant@127.0.0.1:2222] sudo: whoami
[vagrant@127.0.0.1:2222] out: www-data       # <--- good
[vagrant@127.0.0.1:2222] out: 

run inside settings
[vagrant@127.0.0.1:2222] run: whoami
[vagrant@127.0.0.1:2222] out: www-data       # <--- good
[vagrant@127.0.0.1:2222] out: 


Done.
$fab-f test.py-Hvagrant@127.0.0.1:2222测试
[vagrant@127.0.0.1:2222]正在执行任务“测试”
常规跑步
[vagrant@127.0.0.1:2222]run:whoami
[vagrant@127.0.0.1:2222]外出:流浪汉#