最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Mac中运行fab hello出错:No idea what ‘hello’ is!

Mac crifan 1282浏览 0评论
折腾:
【已解决】Mac中安装并试用Fabric
期间,去运行fabric试试,结果出错:
➜  ~ vi fabfile.py
➜  ~ ll
total 736
drwxr-xr-x    2 crifan  staff    64B  1 26  2018 AnacondaProjects
drwx------   10 crifan  staff   320B  5 25 14:24 Applications
drwx------@   4 crifan  staff   128B  4 26 17:36 Applications (Parallels)
drwx------@  10 crifan  staff   320B  5 25 14:24 Desktop
drwx------@  33 crifan  staff   1.0K  8 16 10:10 Documents
drwx------+  88 crifan  staff   2.8K  8 16 10:05 Downloads
drwxr-xr-x    3 crifan  staff    96B 11 12  2017 GitBook
drwxr-xr-x    5 crifan  staff   160B  6  8  2017 HBuilder
drwxr-xr-x    4 crifan  staff   128B  8 13  2016 HBuilderProjects
drwx------@ 100 crifan  staff   3.1K  6 19 14:07 Library
drwx------+  12 crifan  staff   384B  3 28 10:24 Movies
drwx------+  10 crifan  staff   320B 12 23  2017 Music
drwx------+ 287 crifan  staff   9.0K  4  6 21:51 Pictures
drwxr-xr-x+   5 crifan  staff   160B  9 18  2015 Public
drwxr-xr-x+   3 crifan  staff    96B  8 23  2017 Sites
drwxr-xr-x   23 crifan  staff   736B  1 27  2018 anaconda2
drwxr-xr-x    4 crifan  staff   128B  7 26  2016 bin
drwxr-xr-x    9 crifan  staff   288B  9 11  2017 dev
-rw-r--r--    1 crifan  staff   1.7K  5 18 17:39 dump.rdb
-rw-r--r--    1 crifan  staff    39B  8 16 10:57 fabfile.py
-rw-r--r--    1 crifan  staff   334K  9 18  2015 ishot-1.png
-rw-r--r--    1 crifan  staff    19K  1 16  2018 jmeter.log
-rw-r--r--@   1 crifan  staff   1.7K  2  7  2017 runningfast_aws_production.pem
drwxr-xr-x    2 crifan  staff    64B  9 26  2017 tmp
drwxr-xr-x    3 crifan  staff    96B 11 14  2015 微云同步盘
➜  ~ fab hello
No idea what 'hello' is!
➜  ~ cat fabfile.py
def hello():
    print("Hello world!")
➜  ~ fab hello
No idea what 'hello' is!
所以搜:
fabric No idea what ‘hello’ is!
Python – Fabric简介 – Anliven – 博客园
➜  ~ fab --list
No tasks found in collection 'fabfile'!
Fabfile 文件的结构和使用 — Fabric 文档
概览 & 教程 — Fabric 文档
通过之前:
【已解决】Mac中安装并试用Fabric
的:
➜  ~ which fab
/Users/crifan/Library/Python/2.7/bin/fab
➜  ~ fab --version
Fabric 2.3.1
Paramiko 2.4.1
Invoke 1.1.1
知道了此处的fabric版本是2.3.1,
而上面这些教程看起来都是1.x的版本的老教程?
估计和2.x的版本不兼容
去找新版教程
Welcome to Fabric! — Fabric documentation
回到命令行试试制定fabfile的文件名:
➜  ~ fab --help
Usage: fab [--core-opts] task1 [--task1-opts] ... taskN [--taskN-opts]

Core options:

  --complete                        Print tab-completion candidates for given parse remainder.
  --hide=STRING                     Set default value of run()'s 'hide' kwarg.
  --no-dedupe                       Disable task deduplication.
  --prompt-for-login-password       Request an upfront SSH-auth password prompt.
  --prompt-for-passphrase           Request an upfront SSH key passphrase prompt.
  --prompt-for-sudo-password        Prompt user at start of session for the sudo.password config value.
  --write-pyc                       Enable creation of .pyc files.
  -c STRING, --collection=STRING    Specify collection name to load.
  -d, --debug                       Enable debug output.
  -D INT, --list-depth=INT          When listing tasks, only show the first INT levels.
  -e, --echo                        Echo executed commands before running.
  -f STRING, --config=STRING        Runtime configuration file to use.
  -F STRING, --list-format=STRING   Change the display format used when listing tasks. Should be one of: flat (default), nested, json.
  -h [STRING], --help[=STRING]      Show core or per-task help and exit.
  -H STRING, --hosts=STRING         Comma-separated host name(s) to execute tasks against.
  -i, --identity                    Path to runtime SSH identity (key) file. May be given multiple times.
  -l [STRING], --list[=STRING]      List available tasks, optionally limited to a namespace.
  -p, --pty                         Use a pty when executing shell commands.
  -r STRING, --search-root=STRING   Change root directory used for finding task modules.
  -S STRING, --ssh-config=STRING    Path to runtime SSH config file.
  -V, --version                     Show version and exit.
  -w, --warn-only                   Warn, instead of failing, when shell commands fail.

➜  ~ fab -f fabfile.py hello
No idea what 'hello' is!
➜  ~ fab --config=fabfile.py hello
No idea what 'hello' is!
问题依旧。
参考最新官网去运行,也出错:
【已解决】fabric的Connection出错:paramiko.ssh_exception.AuthenticationException: Authentication failed
然后就可以继续操作了:
➜  ~ python
Python 2.7.10 (default, Oct  6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from fabric import Connection
>>> c = Connection(host='47.x.x.x', user='username')
>>> result = c.run('uname -s')
Linux
>>> result.stdout.strip() == 'Linux'
True
>>> result.exited
0
>>> result.ok
True
>>> 
result.command
'uname -s'
>>> result.connection
<Connection host=47.x.x.x user=
username
>
>>> result.connection.host
'47.x.x.x'
>>>
另外也看到了:
http://www.fabfile.org/#i-m-a-user-of-fabric-1-how-do-i-upgrade
->
Upgrading from 1.x — Fabric documentation
中提到了:
Fabric 2+版本和Fabric 1相比:
相当于完全重新实现了
很多(之前组织的不够好的)功能,被废弃或者重新组织了
-》其中的:
“* Command-line parser overhauled to allow for regular GNU/POSIX style flags and options on a per-task basis (no more fab mytask:weird=custom,arg=format);”
-》导致了此处的:
Fabric 1中的
fab hello
现在也不支持了。
而想要在Fabrci 2+的新版本中实现类似于Fabric 1的hello world的例子,则需要再去研究看看
参考:
Getting started — Fabric documentation
http://docs.fabfile.org/en/2.3/getting-started.html#a-note-about-imports
中也提到了:
对于(此处hello world这种)和远程remote服务器没关系的,往往都是调用invoke实现的
而Invoke本身主要就是处理:命令行中的参数导入,任务管理,shell命令执行等事情的
-》所以此处的Fabric 1的hello world,参考:
Python – Fabric简介 – Anliven – 博客园
可以改为:
from invoke import task

@task
def hello(c):
    print("Hello fabric!")
    c.run("echo '--- pip show fabric ---'")
    c.run("pip show fabric")
    # c.run("echo '--- fab --verion ---'")
    # c.run("fab --verion")
    # c.run("fab -V")
    # c.run("/Users/crifan/Library/Python/2.7/bin/fab --verion")
结果:
➜  ~ cat fabfile.py
from invoke import task

@task
def hello(c):
    print("Hello fabric!")
    c.run("echo '--- pip show fabric ---'")
    c.run("pip show fabric")
    # c.run("echo '--- fab --verion ---'")
    # c.run("fab --verion")
    # c.run("fab -V")
    # c.run("/Users/crifan/Library/Python/2.7/bin/fab --verion")%                                                                                                              ➜  ~ fab hello
Hello fabric!
--- pip show fabric ---
Name: fabric
Version: 2.3.1
Summary: High level SSH command execution
Home-page: 
http://fabfile.org
Author: Jeff Forcier
Author-email: 
[email protected]
License: BSD
Location: /Users/crifan/Library/Python/2.7/lib/python/site-packages
Requires: cryptography, paramiko, invoke
Required-by:
You are using pip version 10.0.1, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
【总结】
Fabric 1是老版本
新的Fabric 2+的版本,属于彻底重写了,语法和功能有很大变化
-》所以之前的Fabric 1的hello world例子失效了,要改为:
from invoke import task

@task
def hello(c):
    print("Hello fabric!")
    c.run("echo '--- pip show fabric ---'")
    c.run("pip show fabric")
即可。

转载请注明:在路上 » 【已解决】Mac中运行fab hello出错:No idea what ‘hello’ is!

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
90 queries in 0.182 seconds, using 22.07MB memory