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 |