天天看點

Pexpect自動互動系統

  Pexpect 是 Don Libes 的 Expect 語言的一個 Python 實作,是一個用來啟動子程式,并使用正規表達式對程式輸出做出特定響應,以此實作與其自動互動的 Python 子產品。 Pexpect 的使用範圍很廣,可以用來實作與 ssh、ftp 、telnet 等程式的自動互動;可以用來自動複制軟體安裝包并在不同機器自動安裝;還可以用來實作軟體測試中與指令行互動的自動化。

一、安裝Pexpect

1、安裝python軟體包管理器

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<code>[root@plinuxos ~]</code><code># yum install -y python34-setuptools                                      </code>

<code>Loaded plugins: fastestmirror</code>

<code>Loading mirror speeds from cached hostfile</code>

<code> </code><code>* base: mirrors.btte.net</code>

<code> </code><code>* epel: mirrors.ustc.edu.cn</code>

<code> </code><code>* extras: mirrors.aliyun.com</code>

<code> </code><code>* updates: mirrors.aliyun.com</code>

<code>......</code>

<code>Installed:</code>

<code>  </code><code>python34-setuptools.noarch 0:19.2-3.el7</code>

<code>Dependency Installed:</code>

<code>  </code><code>python34.x86_64 0:3.4.5-4.el7           python34-libs.x86_64 0:3.4.5-4.el7</code>

<code>Complete!</code>

2、安裝pexpect軟體

<code>[root@plinuxos ~]</code><code># easy_install-3.4 pexpect</code>

<code>Searching </code><code>for</code> <code>pexpect</code>

<code>Reading https:</code><code>//pypi</code><code>.python.org</code><code>/simple/pexpect/</code>

<code>Best match: pexpect 4.2.1</code>

<code>Downloading https:</code><code>//pypi</code><code>.python.org</code><code>/packages/e8/13/d0b0599099d6cd23663043a2a0bb7c61e58c6ba359b2656e6fb000ef5b98/pexpect-4</code><code>.2.1.</code><code>tar</code><code>.gz</code><code>#md5=3694410001a99dff83f0b500a1ca1c95</code>

<code>Processing pexpect-4.2.1.</code><code>tar</code><code>.gz</code>

<code>Installed </code><code>/usr/lib/python3</code><code>.4</code><code>/site-packages/ptyprocess-0</code><code>.5.2-py3.4.egg</code>

<code>Finished processing dependencies </code><code>for</code> <code>pexpect</code>

3、驗證安裝效果

<code>[root@plinuxos ~]</code><code># python3.4</code>

<code>Python 3.4.5 (default, May 29 2017, 15:17:55)</code>

<code>[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux</code>

<code>Type </code><code>"help"</code><code>, </code><code>"copyright"</code><code>, </code><code>"credits"</code> <code>or </code><code>"license"</code> <code>for</code> <code>more</code> <code>information.</code>

<code>&gt;&gt;&gt; </code><code>import</code> <code>pexpect</code>

<code>&gt;&gt;&gt; </code><code>dir</code><code>(pexpect)</code>

<code>[</code><code>'EOF'</code><code>, </code><code>'ExceptionPexpect'</code><code>, </code><code>'Expecter'</code><code>, </code><code>'PY3'</code><code>, </code><code>'TIMEOUT'</code><code>, </code><code>'__all__'</code><code>, </code><code>'__builtins__'</code><code>, </code><code>'__cached__'</code><code>, </code><code>'__doc__'</code><code>, </code><code>'__file__'</code><code>, </code><code>'__loader__'</code><code>, </code><code>'__name__'</code><code>, </code><code>'__package__'</code><code>, </code><code>'__path__'</code><code>, </code><code>'__revision__'</code><code>, </code><code>'__spec__'</code><code>, </code><code>'__version__'</code><code>, </code><code>'exceptions'</code><code>, </code><code>'expect'</code><code>, </code><code>'is_executable_file'</code><code>, </code><code>'pty_spawn'</code><code>, </code><code>'run'</code><code>, </code><code>'runu'</code><code>, </code><code>'searcher_re'</code><code>, </code><code>'searcher_string'</code><code>, </code><code>'spawn'</code><code>, </code><code>'spawnbase'</code><code>, </code><code>'spawnu'</code><code>, </code><code>'split_command_line'</code><code>, </code><code>'sys'</code><code>, </code><code>'utils'</code><code>, </code><code>'which'</code><code>]</code>

<code>&gt;&gt;&gt; print(pexpect.run(</code><code>'w'</code><code>))</code>

<code>b</code><code>' 14:27:41 up 67 days,  1:12,  2 users,  load average: 0.00, 0.01, 0.05\r\nUSER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT\r\nroot     tty1                      23Sep17 38days  0.02s  0.02s -bash\r\nroot     pts/0    103.20.249.250   13:55    5.00s  0.14s  0.09s python3.4\r\n'</code>

二、使用pexpect遠端管理裝置

1、建立腳本

<code>[root@plinuxos tmp]</code><code># cat pexpectest.py</code>

<code>import</code> <code>pexpect</code>

<code>import</code> <code>sys</code>

<code>ssh</code><code>=pexpect.spawn(</code><code>'/usr/bin/ssh [email protected].***.***'</code><code>)</code>

<code>ssh</code><code>.expect(</code><code>'password:'</code><code>)</code>

<code>ssh</code><code>.sendline(</code><code>"123456"</code><code>)</code>

<code>ssh</code><code>.expect(</code><code>'#'</code><code>)</code>

<code>ssh</code><code>.sendline(</code><code>"echo 'this is a test'&gt;&gt; /tmp/1.txt"</code><code>)</code>

<code>print(</code><code>ssh</code><code>.before)           </code><code># Print the result of the ls command. </code>

<code>ssh</code><code>.interact()              </code><code># Give control of the ssh to the user.</code>

2、運作腳本

16

17

18

19

20

21

22

23

24

25

26

27

<code>[root@plinuxos tmp]</code><code># python3.4 pexpectest.py</code>

<code>b</code><code>' \r\n  '</code>

<code>#####################################################################</code>

<code>  </code><code>#                              Notice                                #</code>

<code>  </code><code>#                                                                    #</code>

<code>  </code><code>#  1. Please DO NOT upgrade the kernel, as the kernel upgrade would  #</code>

<code>  </code><code>#   damage the original operating system.                            #</code>

<code>  </code><code>#  2. Please create unique passwords that use a combination of words,#</code>

<code>  </code><code>#   numbers, symbols, and both upper-case and lower-case letters.    #</code>

<code>  </code><code>#   Avoid using simple adjacent keyboard combinations such as        #</code>

<code>  </code><code>#   "Qwert!234","Qaz2wsx",etc.                                       #</code>

<code>  </code><code>#  3. Unless necessary, please DO NOT open or use high-risk ports,   #</code>

<code>  </code><code>#   such as Telnet-23, FTP-20/21, NTP-123(UDP), RDP-3389,            #</code>

<code>  </code><code>#   SSH/SFTP-22, Mysql-3306, SQL-1433,etc.                           #</code>

<code>  </code><code>#                     Any questions please contact 4000-955-988      #</code>

<code>  </code><code>######################################################################</code>

<code>[root@pos ~]</code><code># echo 'this is a test'&gt;&gt; /tmp/1.txt</code>

<code>[root@pos ~]</code><code>#</code>

<code>##以上運作腳本後自動輸出</code>

<code>[root@pos ~]</code><code># cat /tmp/1.txt</code>

<code>this is a </code><code>test</code>

<code>[root@pos ~]</code><code># logout</code>

<code>Connection to 122.112.***.*** closed.</code>

本文轉自Grodd51CTO部落格,原文連結:http://blog.51cto.com/juispan/1978101,如需轉載請自行聯系原作者