Python中使用fabric时遇到问题求助

想写个脚本,随机获取 5 个文件,然后用 fabric 把这 5 个文件复制到其他地方。
前面获取文件终于搞好了,但是突然发现 fabric 执行 local()或者 run()命令的时候好想不能传入参数,是这样吗?
反正我以前写的()里面都是字符形的内容。
有没有其他方法可以实现传入参数执行,centos7 环境下。
还要从其他设备上获取相同文件名的 5 个文件到本地。
有人遇到过这类问题的吗。
def cp_file(pesq_file,f_name):
with lcd(pesq_file):
local(“cp。。。。。。。。。”)
Python中使用fabric时遇到问题求助


9 回复


这里 local(“cp …”) 命令在括号内的都是写在引号内的。这样的话我想操作 f_name 所代表的文件 的话要怎么写?
解决了这个 run ()、put () 就都懂了。


为什么不能传入参数呢? run()中的 command 参数可以传入任意字符串


我把 run 命令放在一个循环里面了。对列表所有元素执行 run 命令。文件中指定了
env.hosts = [‘172.16…’]
env.password = [‘passwd’]
env.user = [‘user’]
但是执行的时候总是提示我需要手动输入 hosts
No hosts found. Please specify (single) host string for connection:
我执行其他函数的时候就可以读取 hosts 这是为什么?

找到问题原因了。在 fab 文件定义函数的时候如果同时向函数内传入参数的话,貌似会对本来模块自动传入的类似 env 的参数产生干扰,所以总是提示说没找到 env.hosts。
另外在脚本最后指定 if name ==‘main’:下面执行的时候
execute(cp_file(a))、cp_file(a) 这两中方法都能执行成功,但是都会提示没找到 hosts。
不传入参数的话,怎么调用需要的列表呢?在函数里面执行产生列表的函数,然后调用这个函数的返回值?这样可以吗?

有没有写过类似脚本的人啊。求指点迷津啊。。。。。。

你先搞明白什么叫 local(),它的参数是字符串形式的一条命令,具体命令什么意思不是由 fabric 说了算的,是由 shell 说了算的。如果你能写出来“跨机器复制文件”这个功能,那自然可以用 local 来调用它;你如果写不出来,那就不能用

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

你不要抱着“除了 local()和 run()以外我都拒绝用”的态度来思考问题。你这前提根本就是错的


总算在下班前搞出来了。用这个 env.host_string = 指定 ip 就可以了。之前还总把 put 和 get 给搞混。试了半天才发现用错命令了ヾ(๑╹◡╹)ノ"



还是多看看文档,理解运行方式
你之前的提问,并没有说清楚文件的源路径和目标路径是不是同一台机器啊


确实还是看书少的缘故。
而且全公司就我一个人在搞这个。遇到问题连个讨论的人都没有 。现翻书吧,又不好找。坑

回到顶部