【问题标题】:Python and Pexpect -- Pxssh is installed but not availablePython 和 Pexpect -- Pxssh 已安装但不可用
【发布时间】:2019-02-26 06:51:10
【问题描述】:

我和这张海报有同样的问题:Can't import pxssh from pexpect

但是,适用于上述海报的解决方案不适用于我。

问题来了...我是一个 Python 新手,正在编写 Python 脚本(Python 2.7.5)并安装了 pexpect 4.6.0。我可以在我的代码中导入和使用 pexpect。但是,我需要使用 pxssh,这不起作用。这是我的代码爆炸:

Linux $ ./myCode.py
Traceback (most recent call last):
  File "./myCode.py", line 4, in <module>
    from pexpect import pxssh
ImportError: cannot import name pxssh
Linux $

代码是这样的:

#!/usr/bin/python

import sys, time, datetime, logging
from pexpect import pxssh

...
s = pxssh.pxssh()
s = pxssh.pxssh(options={"StrictHostKeyChecking": "no", "UserKnownHostsFile": "/dev/null"})
...more stuff...

所以我相信我正确地包含了 pxssh 库,并且我在我的代码中正确地调用了该类。问题是,虽然我的系统上安装了 pexpect,但 pxssh 不可用。我不知道为什么。

当我搜索我的系统时,我在 pexpect 目录中看到一个“pxssh.py”文件:

Linux $ pwd
/home/me/project1/lib/python3.6/site-packages/pexpect-4.6.0-py3.6.egg/pexpect
Linux $
Linux $ ls -l
total 200
-rw-r--r--. 1 ph9821 domain users 12177 Sep 21 15:58 ANSI.py
-rw-r--r--. 1 ph9821 domain users  2685 Sep 21 15:58 _async.py
-rw-rw-r--. 1 ph9821 domain users   380 Sep 21 15:58 bashrc.sh
-rw-r--r--. 1 ph9821 domain users  1068 Sep 21 15:58 exceptions.py
-rw-r--r--. 1 ph9821 domain users 11035 Sep 21 15:58 expect.py
-rw-r--r--. 1 ph9821 domain users  5828 Sep 21 15:58 fdpexpect.py
-rw-r--r--. 1 ph9821 domain users 13419 Sep 21 15:58 FSM.py
-rw-r--r--. 1 ph9821 domain users  3902 Sep 21 15:58 __init__.py
-rw-r--r--. 1 ph9821 domain users  6161 Sep 21 15:58 popen_spawn.py
-rw-r--r--. 1 ph9821 domain users 35855 Sep 21 15:58 pty_spawn.py
-rw-r--r--. 1 ph9821 domain users 22589 Sep 21 15:58 pxssh.py        <<<====
drwxr-xr-x. 2 ph9821 domain users  4096 Sep 21 15:58 __pycache__
-rw-r--r--. 1 ph9821 domain users  5170 Sep 21 15:58 replwrap.py
-rw-r--r--. 1 ph9821 domain users  6632 Sep 21 15:58 run.py
-rw-r--r--. 1 ph9821 domain users 13716 Sep 21 15:58 screen.py
-rw-r--r--. 1 ph9821 domain users 21067 Sep 21 15:58 spawnbase.py
-rw-r--r--. 1 ph9821 domain users  6019 Sep 21 15:58 utils.py

Linux $

在另一篇文章中,他们建议检查我是否需要升级,但这没有帮助:

Linux $ easy_install --upgrade pexpect
Searching for pexpect
Reading https://pypi.python.org/simple/pexpect/
Best match: pexpect 4.6.0
Processing pexpect-4.6.0-py3.6.egg
pexpect 4.6.0 is already the active version in easy-install.pth

Using /home/me/project1/lib/python3.6/site-packages/pexpect-4.6.0-py3.6.egg
Processing dependencies for pexpect
Finished processing dependencies for pexpect
Linux $

所以...我使用的是 Python 的兼容版本,安装了最新的 pexpect 并且可以正常工作,并且 pxssh.py 位于正确的位置。然而,代码不知道如何使用 pxssh。

我还应该说 pxssh 从未在这台机器上工作过。安装 pexpect 后我需要做些什么来踢 pxssh 吗?

这可能是 Python 2.7.5 和 pexpect 4.6.0 之间的某种版本兼容性问题吗?我注意到在我的 pexpect 安装路径中有对 Python 3.6 的引用...

附录:

我还注意到,当我将代码更改为:

#!/usr/bin/python

import sys, time, datetime, logging, pexpect
from pexpect import *
...
s = pexpect.pxssh()
s = pexpect.pxssh(options={"StrictHostKeyChecking": "no", "UserKnownHostsFile": "/dev/null"})
...

错误信息变成这样:

Linux $ ./myCode
Traceback (most recent call last):
  File "./myCode.py", line 188, in <module>
    s = pexpect.pxssh()
AttributeError: 'module' object has no attribute 'pxssh'
Linux $

所以代码可以使用 pexpect 但不能使用 pxssh。这意味着 pxssh 没有安装???真的很迷茫……

【问题讨论】:

  • 你似乎混合了python 2和3。尝试使用easy_install-2.7而不是easy_install来强制使用你想要的python版本。
  • @meuh 是的,我开始认为你是对的。不幸的是,easy_install-2.7 没有帮助。但如果你是对的,我应该——理论上——能够升级到 python 3,或者只是卸载所有 python 并在 ver3 上开始全新安装。你同意吗?非常感谢:)
  • 我没有用过easy_install,所以我不确定它是如何管理的,但它应该允许你一次拥有多个版本的python,我不认为这是一个问题。如果您真的想确保您的脚本将作为哪个版本的 python 运行,您需要以 #!/usr/bin/python2#!/usr/bin/python3 开始您的脚本。 /usr/bin/python 可能是 2 或可能是 3,这取决于您的系统。另外,这是使用 pxssh 的典型方式:from python import pxssh; s = pxssh.pxssh(); if s.login(...)

标签: python pexpect pxssh


【解决方案1】:
import pxssh

s = pxssh.pxssh()

上面的代码 sn-p 应该可以工作,尝试只导入 pxssh 模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    相关资源
    最近更新 更多