求助!!!使用 fabric 的时候遇到问题。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
LeIYc
V2EX    Python

求助!!!使用 fabric 的时候遇到问题。

  •  1
     
  •   LeIYc 2018-04-11 16:48:02 +08:00 2821 次点击
    这是一个创建于 2745 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想写个脚本,随机获取 5 个文件,然后用 fabric 把这 5 个文件复制到其他地方。
    前面获取文件终于搞好了,但是突然发现 fabric 执行 local()或者 run()命令的时候好想不能传入参数,是这样吗?
    反正我以前写的()里面都是字符形的内容。
    有没有其他方法可以实现传入参数执行,centos7 环境下。
    还要从其他设备上获取相同文件名的 5 个文件到本地。
    有人遇到过这类问题的吗。
    def cp_file(pesq_file,f_name):
    with lcd(pesq_file):
    local("cp。。。。。。。。。")
    第 1 条附言    2018-04-13 10:37:10 +08:00
    在 fab 文件定义函数的时候如果同时向函数内传入参数的话,貌似会对本来模块自动传入的类似 env 的参数产生干扰,所以总是提示说没找到 env.hosts。
    另外在脚本最后指定 if __name__ =='__main__':下面执行的时候
    execute(cp_file(a))、cp_file(a) 这两中方法都能执行成功,但是都会提示没找到 hosts。
    不传入参数的话,怎么调用需要的列表呢?在函数里面执行产生列表的函数,然后调用这个函数的返回值?这样可以吗?
    10 条回复    2018-04-13 20:58:55 +08:00
    julyclyde
        1
    julyclyde  
       2018-04-11 17:08:57 +08:00
    你这问题跟 fabric 就没啥关系
    跨机器复制本来也不是用 cp 命令

    http://docs.fabfile.org/en/1.14/api/core/operations.html
    用 fabric 的 put
    LeIYc
        2
    LeIYc  
    OP
       2018-04-11 17:29:35 +08:00
    @julyclyde
    这里 local("cp .....") 命令在括号内的都是写在引号内的。这样的话我想操作 f_name 所代表的文件 的话要怎么写?
    解决了这个 run ()、put () 就都懂了。
    pengyou1woodat
        3
    pengyou1woodat  
       2018-04-12 20:13:53 +08:00
    为什么不能传入参数呢? run()中的 command 参数可以传入任意字符串
    LeIYc
        4
    LeIYc  
    OP
       2018-04-13 09:58:59 +08:00
    @pengyou1woodat
    我把 run 命令放在一个循环里面了。对列表所有元素执行 run 命令。文件中指定了
    env.hosts = ['172.16......']
    env.password = ['passwd']
    env.user = ['user']
    但是执行的时候总是提示我需要手动输入 hosts
    No hosts found. Please specify (single) host string for connection:
    我执行其他函数的时候就可以读取 hosts 这是为什么?
    LeIYc
        5
    LeIYc  
    OP
       2018-04-13 10:34:06 +08:00
    找到问题原因了。在 fab 文件定义函数的时候如果同时向函数内传入参数的话,貌似会对本来模块自动传入的类似 env 的参数产生干扰,所以总是提示说没找到 env.hosts。
    另外在脚本最后指定 if __name__ =='__main__':下面执行的时候
    execute(cp_file(a))、cp_file(a) 这两中方法都能执行成功,但是都会提示没找到 hosts。
    不传入参数的话,怎么调用需要的列表呢?在函数里面执行产生列表的函数,然后调用这个函数的返回值?这样可以吗?
    LeIYc
        6
    LeIYc  
    OP
       2018-04-13 10:35:57 +08:00
    有没有写过类似脚本的人啊。求指点迷津啊。。。。。。
    julyclyde
        7
    julyclyde  
       2018-04-13 19:55:04 +08:00
    你先搞明白什么叫 local(),它的参数是字符串形式的一条命令,具体命令什么意思不是由 fabric 说了算的,是由 shell 说了算的。如果你能写出来“跨机器复制文件”这个功能,那自然可以用 local 来调用它;你如果写不出来,那就不能用

    从你的提问上来看,你大概是不知道 scp 命令的,所以你不该用 local()

    你不要抱着“除了 local()和 run()以外我都拒绝用”的态度来思考问题。你这前提根本就是错的
    LeIYc
        8
    LeIYc  
    OP
       2018-04-13 20:49:54 +08:00
    @julyclyde
    总算在下班前搞出来了。用这个 env.host_string = 指定 ip 就可以了。之前还总把 put 和 get 给搞混。试了半天才发现用错命令了()"
    julyclyde
        9
    julyclyde  
       2018-04-13 20:52:02 +08:00
    @LeIYc

    还是多看看文档,理解运行方式
    你之前的提问,并没有说清楚文件的源路径和目标路径是不是同一台机器啊
    LeIYc
        10
    LeIYc  
    OP
       2018-04-13 20:58:55 +08:00
    @julyclyde
    确实还是看书少的缘故。
    而且全公司就我一个人在搞这个。遇到问题连个讨论的人都没有 。现翻书吧,又不好找。坑
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     908 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:17 PVG 04:17 LAX 13:17 JFK 16:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86