ホームページ > バックエンド開発 > Python チュートリアル > Python のインストールでは、コマンド ライン対話型モジュール pexpect を使用します。

Python のインストールでは、コマンド ライン対話型モジュール pexpect を使用します。

高洛峰
リリース: 2017-03-02 16:52:01
オリジナル
2300 人が閲覧しました

Pexpect は、ssh、ftp、passwd、telnet などのコマンド ライン コマンドと対話するために使用できる純粋な Python モジュールです。Linux システムで特に簡単に使用できます。Python のインストールと使用方法を詳しく見てみましょう。コマンドライン対話型モジュール pexpect の基本チュートリアル:

1. インストール
1. easy_install ツールをインストールします

python ez_setup.py をインストールします (このスクリプトは自動的に公式 Web サイトに移動します)検索、ダウンロード、インストールします)


wget http://peak.telecommunity.com/dist/ez_setup.py
ログイン後にコピー

easy_install ツールをアップグレードします

2. pexpect をインストールします


python ez_setup.py -U setuptools
ログイン後にコピー

テストしてください:


easy_install Pexpect
ログイン後にコピー

OKがインストールされました。

2. 基本的な使い方
1.run()関数
run関数は比較的単純で、簡単な操作しか実現できません


コードをコピーする

コードは次のとおりです:


(command, timeout =-1,withexitstatus=False,events=None,extra_args=None, logfile=None, cwd=None, env=None)


run はコマンドを実行し、次のような結果を返します。 os.system.

例:


[root@OMS python]# python
Python 2.7.3rc1 (default, Nov 7 2012, 15:03:45)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pexpect
>>> import pxssh
>>>
ログイン後にコピー

2. スポーンクラス

spawnはrunよりも強力で、より複雑な対話を実現できます

pexpect.run('ls -la')
# 返回值(输出,退出状态)
(command_output, exitstatus) = pexpect.run('ls -l /bin', withexitstatus=1)
ログイン後にコピー

timeoutは待機のタイムアウト値を指定します。インタラクション用に、

maxread は、TTY (Teletype 端末) からの読み取りを試行する最大バイト数を設定します。


searchwindowsize は、入力バッファからのパターン マッチングの位置を指定します。先頭から一致します。

logfile パラメータは、ログの記録場所を指定します。

作業プロセス:



class spawn 
  __init__(self, command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None)
ログイン後にコピー

3.pxsshクラス

pxsshは、ssh接続を確立するために使用されるpexpectの派生クラスであり、pexpectよりも使いやすいです。
login() ターゲットマシンへの ssh 接続を確立します;

logout() 接続を解放します;

prompt() プロンプトを待ちます。通常はコマンドの実行の完了を待つために使用されます。

3. 例
コマンドをリモートサーバーに送信し、結果を返すスクリプトを作成します。
スクリプトの内容:


# 第一步与终端建立连接
child = pexpect.spawn('scp foo user@example.com:.')
# 第二步等待终端返回特定内容
child.expect('Password:')
# 第三步根据返回内容发送命令进行交互
child.sendline(mypassword)
ログイン後にコピー

使用法:

#!/usr/bin/python 
#2013-01-16 by larry 
import pexpect 
def login(port,user,passwd,ip,command): 
  child=pexpect.spawn('ssh -p%s %s@%s "%s"' %(port,user,ip,command)) 
  o='' 
  try: 
    i=child.expect(['[Pp]assword:','continue connecting (yes/no)?']) 
    if i == 0: 
      child.sendline(passwd) 
    elif i == 1: 
      child.sendline('yes') 
    else: 
      pass 
  except pexpect.EOF: 
    child.close() 
  else: 
    o=child.read() 
    child.expect(pexpect.EOF) 
    child.close() 
  return o 
 
hosts=file('hosts.list','r') 
for line in hosts.readlines(): 
  host=line.strip("\n") 
  if host: 
    ip,port,user,passwd,commands= host.split(":") 
    for command in commands.split(","): 
      print "+++++++++++++++ %s run:%s ++++++++++++" % (ip,command), 
      print login(port,user,passwd,ip,command)  
hosts.close()
ログイン後にコピー

host.listファイルの内容は次のとおりです:


python scripts.py
ログイン後にコピー

戻り結果:


りー


Python のインストールとコマンド ライン インタラクティブ モジュール pexpect の使用に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート