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

2018-04-11 16:48:02 +08:00
 LeIYc
想写个脚本,随机获取 5 个文件,然后用 fabric 把这 5 个文件复制到其他地方。
前面获取文件终于搞好了,但是突然发现 fabric 执行 local()或者 run()命令的时候好想不能传入参数,是这样吗?
反正我以前写的()里面都是字符形的内容。
有没有其他方法可以实现传入参数执行,centos7 环境下。
还要从其他设备上获取相同文件名的 5 个文件到本地。
有人遇到过这类问题的吗。
def cp_file(pesq_file,f_name):
with lcd(pesq_file):
local("cp。。。。。。。。。")
2449 次点击
所在节点    Python
10 条回复
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
2018-04-11 17:29:35 +08:00
@julyclyde
这里 local("cp .....") 命令在括号内的都是写在引号内的。这样的话我想操作 f_name 所代表的文件 的话要怎么写?
解决了这个 run ()、put () 就都懂了。
pengyou1woodat
2018-04-12 20:13:53 +08:00
为什么不能传入参数呢? run()中的 command 参数可以传入任意字符串
LeIYc
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
2018-04-13 10:34:06 +08:00
找到问题原因了。在 fab 文件定义函数的时候如果同时向函数内传入参数的话,貌似会对本来模块自动传入的类似 env 的参数产生干扰,所以总是提示说没找到 env.hosts。
另外在脚本最后指定 if __name__ =='__main__':下面执行的时候
execute(cp_file(a))、cp_file(a) 这两中方法都能执行成功,但是都会提示没找到 hosts。
不传入参数的话,怎么调用需要的列表呢?在函数里面执行产生列表的函数,然后调用这个函数的返回值?这样可以吗?
LeIYc
2018-04-13 10:35:57 +08:00
有没有写过类似脚本的人啊。求指点迷津啊。。。。。。
julyclyde
2018-04-13 19:55:04 +08:00
你先搞明白什么叫 local(),它的参数是字符串形式的一条命令,具体命令什么意思不是由 fabric 说了算的,是由 shell 说了算的。如果你能写出来“跨机器复制文件”这个功能,那自然可以用 local 来调用它;你如果写不出来,那就不能用

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

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

还是多看看文档,理解运行方式
你之前的提问,并没有说清楚文件的源路径和目标路径是不是同一台机器啊
LeIYc
2018-04-13 20:58:55 +08:00
@julyclyde
确实还是看书少的缘故。
而且全公司就我一个人在搞这个。遇到问题连个讨论的人都没有 。现翻书吧,又不好找。坑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/445980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX