10

我正在使用 Fabric 并想使用 fexpect。我有以下 Python 脚本:

from ilogue.fexpect import expect, expecting, run

(...)

def install_postgresql(profile):
print("!!! Installing PostgreSQL...")
print(' -> Doing pre-cleanup...')

# Remove PostgreSQL if it exists

prompts = []
prompts += expect('Do you want to continue [Y/n]? ', 'Y')

with settings(warn_only=True):
    with expecting(prompts):
        run('sudo apt-get purge postgresql')

print(' -> Doing actual installation...')

# Install PostgreSQL

prompts = []
prompts += expect('Do you want to continue [Y/n]? ', 'Y')

with expecting(prompts):
    run('sudo apt-get install postgresql')

# In some cases PostgreSQL has issues with Ubuntu's default kernel params
# that prevent PostgreSQL to start automatically, so we try to start it
# TODO: Fix it
with settings(warn_only=True):
    run('sudo service postgresql start')

执行时出现以下错误:

[xxx.xxx.xxx.xxx] out: Traceback (most recent call last):
[xxx.xxx.xxx.xxx] out:   File "/tmp/fexpect_MbW3QP6Zpy5KBjBGQcaYxi", line 4, in <module>
[xxx.xxx.xxx.xxx] out:     import pexpect
[xxx.xxx.xxx.xxx] out: ImportError: No module named pexpect

我正在使用 virtualenv 并且实际安装了 pexpect:

(venv)PALM00545424A:woopup i841712$ pip install pexpect
Requirement already satisfied (use --upgrade to upgrade): pexpect in ./venv/lib/python2.7/site-packages
4

4 回答 4

17

找到了解决方案。

pexpect 不是远程机器的 Python 安装的一部分。

我只是执行

sudo -E pip install pexpect 

在远程机器上。

于 2014-03-26T18:39:03.807 回答
2

事实上,如果你的脚本使用 fexcept,你需要运行的命令实际上是:

sudo -E pip install fexpect 
于 2014-09-25T15:58:24.070 回答
0

不是直接回答您的问题,但像 chef、puppet 或 salt 这样的工具更适合安装系统包。

于 2014-03-26T18:42:49.797 回答
0

使用 pexpect lib 与 gatttool 交互时,我遇到了同样的错误。我使用 Pycharm 在 Raspberry pi 上远程调试代码。这是Pycharm处理的命令和错误输出

sudo+ssh://pi3@192.168.x.x:22/usr/bin/python3 -u /tmp/pycharm_project_55/Rasp_Pi/BluetoothBLEComm.py
Traceback (most recent call last):
  File "/tmp/pycharm_project_55/Rasp_Pi/BluetoothBLEComm.py", line 33, in <module>
    import pexpect
ModuleNotFoundError: No module named 'pexpect'

花了几个小时后,我发现问题出在我在 Pycharm 中配置远程 Python 解释器时检查的选项上。它是通过 sudo 以 root 权限执行代码的选项。

**sudo**+ssh://pi3@192.168.x.x:22/usr/bin/python3...

pexpect 软件包仅为我的本地 pi3 用户安装。因此,为了解决这个问题,我必须使用 sudo 安装 pexpect 或取消选中以 root 权限执行代码的选项。

于 2021-04-18T21:37:03.823 回答