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 |
2 LeIYc OP @julyclyde 这里 local("cp .....") 命令在括号内的都是写在引号内的。这样的话我想操作 f_name 所代表的文件 的话要怎么写? 解决了这个 run ()、put () 就都懂了。 |
3 pengyou1woodat 2018-04-12 20:13:53 +08:00 为什么不能传入参数呢? run()中的 command 参数可以传入任意字符串 |
4 LeIYc OP @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 这是为什么? |
5 LeIYc OP 找到问题原因了。在 fab 文件定义函数的时候如果同时向函数内传入参数的话,貌似会对本来模块自动传入的类似 env 的参数产生干扰,所以总是提示说没找到 env.hosts。 另外在脚本最后指定 if __name__ =='__main__':下面执行的时候 execute(cp_file(a))、cp_file(a) 这两中方法都能执行成功,但是都会提示没找到 hosts。 不传入参数的话,怎么调用需要的列表呢?在函数里面执行产生列表的函数,然后调用这个函数的返回值?这样可以吗? |
6 LeIYc OP 有没有写过类似脚本的人啊。求指点迷津啊。。。。。。 |
7 julyclyde 2018-04-13 19:55:04 +08:00 你先搞明白什么叫 local(),它的参数是字符串形式的一条命令,具体命令什么意思不是由 fabric 说了算的,是由 shell 说了算的。如果你能写出来“跨机器复制文件”这个功能,那自然可以用 local 来调用它;你如果写不出来,那就不能用 从你的提问上来看,你大概是不知道 scp 命令的,所以你不该用 local() 你不要抱着“除了 local()和 run()以外我都拒绝用”的态度来思考问题。你这前提根本就是错的 |
8 LeIYc OP @julyclyde 总算在下班前搞出来了。用这个 env.host_string = 指定 ip 就可以了。之前还总把 put 和 get 给搞混。试了半天才发现用错命令了()" |
10 LeIYc OP |