導航:首頁 > 編程語言 > pythonexpect模塊

pythonexpect模塊

發布時間:2022-06-10 19:07:25

python 腳本中pexpect模塊問題~

親不清楚你為什麼匹配兩次y/n

我給你個例子說明expect的用法
例如我ssh連接一台伺服器

連接之後會有提示,此時我們可以使用expect

ssh.expect('continueconnecting(yes/no)?')

之前的字元應該自動正則了
expect之後我們就可以根據提示輸入要輸入的信息
ssh.sendline('yes ')

哦shit我發現個問題你是不是應該試試crt.sendline('y ')

❷ python中的Pexpect模塊使用時,child.expect('參數')中的參數到底應該填什麼內容謝謝!

當你發布一條命令後,系統會給你一個反饋。

參數:就是你所期望的反饋!
比如說,當你發布一條命令後,期望系統提示 "Password" 讓你輸入密碼,那語句就是
child.expect ('Password:')

參數也可以用正則表達式,注意是最小匹配模式。

❸ python pexpect 為什麼無法接收過多的輸出信息

ssh-keygen -f id_rsa -t rsa -N '' 直接執行這個bash命令就可以了,不用python腳本
當你發布一條命令後,系統會給你一個反潰 參數:就是你所期望的反饋! 比如說,當你發布一條命令後,期望系統提示 "Password" 讓你輸入密碼,那語句就是 child.expect ('Password:') 參數也可以用正則表達式,注意是最小匹配模式。

❹ 怎樣用python實現scp

scp 功能很強大,但需要人工輸入 password, 當然可以通過把 公鑰保存在遠程主機的 ~/.ssh 目錄中,而後就不用輸入password,但這需要配置.

用 sshpass 可能在命令輸入 password, 但 需要用 「sudo apt-get install sshpass」 安裝
如果不想用上面兩種方法,可以用 expect 編寫腳本可以幫助我們自動交互

雖然 Python 也提供 pexpect 模塊,但既然 expect 很簡單,為何不直接用 os.system() 去執行呢?

下面是我編寫的類,實現了遠程復制

[html] view plain
class RemoteShell:

def __init__(self, host, user, pwd):
self.host = host
self.user = user
self.pwd = pwd

def put(self, local_path, remote_path):
scp_put = '''
spawn scp %s %s@%s:%s
expect "(yes/no)?" {
send "yes\r"
expect "password:"
send "%s\r"
} "password:" {send "%s\r"}
expect eof
exit'''
os.system("echo '%s' > scp_put.cmd" % (scp_put % (os.path.expanser(local_path), self.user, self.host, remote_path, self.pwd, self.pwd)))
os.system('expect scp_put.cmd')
os.system('rm scp_put.cmd')

但發現每次文件都沒有復制完,我想看expect 究竟做了什麼事情,還好 expect 提供 -d 參數給出更多的信息。
最後發現是被復制文件太大,expect 超時退出了

在腳本前加入 「set timeout -1" 就OK了

[html] view plain
scp_put = '''
set timeout -1
spawn scp %s %s@%s:%s
expect "(yes/no)?" {
send "yes\r"
expect "password:"
send "%s\r"
} "password:" {send "%s\r"}
expect eof
exit'''

❺ pexpect python有什麼好處

child.expect(r']\$')
child.sendline("echo hallo >> /home/benny/2.txt")
child.expect(r']\$')
child.sendline("echo abc >> /home/benny/3.txt")

#############################################

ssh連接上後,匹配到 "]$"時 "echo hallo >> /home/benny/2.txt",匹配到 "]$" 時,"echo abc >> /home/benny/3.txt"

為什麼第二個沒有寫入呢,不知道是沒有匹配到沒有執行,還是其他原因

對於pexpect幫助中的這段也不明白,

Please note, however, that buffering can affect this behavior, since
input arrives in unpredictable chunks. For example::

# the input is 'foobar'
index = p.expect (['foobar', 'foo'])
# returns 0 ('foobar') if all input is available at once,
# but returs 1 ('foo') if parts of the final 'bar' arrive late

❻ aexpect屬於python哪個包

聽說過pexpect

❼ python的公共變數如何管理

全局變數管理模塊
首先定義一個全局變數管理模塊

# common/gloabalvar.py
# -*- coding:utf-8 -*-
"""
global var mole
"""

def _init():
global _global_dict
_global_dict = {}

def set_value(name, value):
"""定義一個全局變數"""
_global_dict[name] = value

def get_value(name, defValue=None):
"""獲取一個全局變數值,不能存在則返回默認值"""
try:
return _global_dict[name]
except KeyError:
return defValue
二、初始化及定義(設置)全局變數
# main.py

import app.common.globalvar as globalvar

if __name__ == "__main__":
# init global var
globalvar._init()
globalvar.set_value('itsm_deadline', SettingConfig.ITSM_DAILY_DEADLINE)
globalvar.set_value('email_subject', SettingConfig.EMAIL_SUBJECT)
globalvar.set_value('email_recipients', SettingConfig.EMAIL_RECIPIENTS)
globalvar.set_value('auto_submit_status', SettingConfig.AUTO_SUBMIT_STATUS)
1
2
3
4
5
6
7
8
9
10
11
三、獲取全局變數
# business.py
import app.common.globalvar as globalvar

status = globalvar.get_value('auto_submit_status')
附加:API管理全局變數,都是基於上述三點完成
對於flask-restful的web應用則可以通過API介面查看全局變數的值以及通過API介面設置和管理它們

# app/api/v1/test/test.py
from flask_restplus import Resource
import app.common.globalvar as globalvar
from .marshal_model import admin_api_ns as api

@api.route('/')
class GlobalVar(Resource):
"""全局變數管理API"""
@api.doc('Get all the global var')
@api.response(HTTP_GET_SUCCESS, 'query success')
def get(self):
"""查詢所有的全局變數"""
glist = globalvar._global_dict
return glist, HTTP_GET_SUCCESS

@api.route('/auto')
class AutoSubmit(Resource):
"""查看及修改自動狀態的API"""
@api.doc('check auto submit status')
@api.marshal_with(set_autosubmit)
@api.response(HTTP_GET_SUCCESS, 'query success')
def get(self):
"""測試查看自動狀態開關狀態"""
status = globalvar.get_value('auto_submit_status')
# status = query_autojob_status()
return {'status': status}, HTTP_GET_SUCCESS

@login_required
@admin_required
@api.doc('set auto submit the planlist everyday')
@api.expect(set_autosubmit)
def post(self):
"""設置每天定時自動開關"""
data = request.json
status = data.get('status')
globalvar.set_value('auto_submit_status', status)
# resp, returncode = update_autojob_status(status)
return {'message': 'success'}, HTTP_POST_SUCCESS

❽ python pexpect 模塊

Pexpect 是一個用來啟動子程序並對其進行自動控制的 Python 模塊,它可以用來和像 ssh、ftp、passwd、telnet 等命令行程序進行自動交互。
下面這個實例功能是:以ssh遠程登錄,登錄成功後執行命令『ls -lh』
pexpect之spawn類
當然,ssh登錄還可以使用pexpect的run函數實現:
#events是一個字典,定義了expect和sendline的對應關系pexpect.run('ssh [email protected]',events={'password:','123456'})

針對ssh遠程登錄,pexpect又派生出了pxssh類,在ssh會話操作上再做一層封裝
其常用方法是:
login() #建立ssh連接
logout()#斷開ssh連接
prompt()#等待系統提示符,用於等待命令執行結束

❾ python 的pexpect模塊怎麼安裝

當然,ssh登錄還可以使用pexpect的run函數實現:
#events是一個字典,定義了expect和sendline的對應關系
pexpect.run('ssh [email protected]',events={'password:','123456'})

針對ssh遠程登錄,pexpect又派生出了pxssh類,在ssh會話操作上再做一層封裝
其常用方法是:
login() #建立ssh連接
logout() #斷開ssh連接
prompt() #等待系統提示符,用於等待命令執行結束

❿ 如何Python3.4使用pexpect來實現SSH登陸

Pexpect 是 Don Libes 的 Expect 語言的一個 Python 實現,是一個用來啟動子程序,並使用正則表達式對程序輸出做出特定響應,以此實現與其自動交互的 Python 模塊。 Pexpect 的使用范圍很廣,可以用來實現與 ssh、ftp 、telnet 等程序的自動交互;可以用來自動復制軟體安裝包並在不同機器自動安裝;還可以用來實現軟體測試中與命令行交互的自動化。

在shell裡面用過pexpect的人,相信都會很熟悉這種工具,pexpect是expect的python的一個實現,利用python來操作某些互動式的自動化任務是非常方便的。

閱讀全文

與pythonexpect模塊相關的資料

熱點內容
韓國料理pdf 瀏覽:227
什麼app就能知道自己的臉型 瀏覽:383
准了app月卡可以看什麼 瀏覽:140
雲伺服器開機要開30秒 瀏覽:646
php數組傳遞給js 瀏覽:639
在世紀的轉折點上pdf 瀏覽:857
變頻製冷壓縮機性能實驗 瀏覽:574
印刷哪個app好 瀏覽:366
安卓手機如何查看連接過的wifi密碼 瀏覽:461
chrpythonord 瀏覽:353
android切片 瀏覽:230
前端js調用php 瀏覽:591
文件夾res是什麼 瀏覽:488
linuxput命令 瀏覽:932
智能仿生演算法模擬退火 瀏覽:903
汽車辦解壓能代辦嗎 瀏覽:13
美林程序員 瀏覽:841
安卓如何開網路 瀏覽:731
宿來app什麼時候上線 瀏覽:765
成都python培訓機構好不好 瀏覽:422