È»¶ø£¬ÊÖ¶¯Ö´ÐÐÕâЩ½»»¥ÈÎÎñ¼ÈºÄʱÓÖÈÝÒ׳ö´í
ÐÒÔ˵ÄÊÇ£¬ÓÐÒ»¸öÇ¿´óµÄPythonÄ£¿é¡ª¡ªPexpect£¬Äܹ»¼«´óµØ¼ò»¯ÕâÒ»¹ý³Ì£¬ÊµÏÖÃüÁîÐн»»¥µÄ×Ô¶¯»¯
±¾ÎĽ«Ïêϸ½éÉÜPexpectµÄ»ù±¾¸ÅÄî¡¢°²×°ÓëÅäÖá¢Ö÷Òª¹¦Äܼ°ÆäÔÚʵ¼ÊÓ¦ÓÃÖеÄÇ¿´óÓÅÊÆ
Ò»¡¢PexpectµÄ»ù±¾¸ÅÄî PexpectÊÇDon LibesµÄExpectÓïÑÔµÄÒ»¸öPythonʵÏÖ£¬ÊÇÒ»¸öÓÃÓÚÆô¶¯×Ó³ÌÐò²¢¶ÔÆä½øÐÐ×Ô¶¯¿ØÖƵÄPythonÄ£¿é
Pexpectͨ¹ýÄ£Äâ¼üÅÌÊäÈëµÄ·½Ê½£¬ÓëÏñssh¡¢ftp¡¢passwd¡¢telnetµÈÃüÁîÐгÌÐò½øÐÐ×Ô¶¯½»»¥
ÆäºËÐÄÔÀíÊÇͨ¹ýos.spawnvpeº¯Êý´´½¨Ò»¸ö×Ó½ø³Ì£¬²¢ÀûÓÃptyÄ£¿éÌṩµÄαÖÕ¶Ë£¨pseudo-terminal£©Óë֮ͨÐÅ
ÀûÓÃαÖն˵ÄÌØµã£¬Pexpect¿ÉÒÔÄ£ÄâÒ»¸öÕæÊµµÄÓû§»·¾³£¬Ê¹µÃ×Ó½ø³ÌÎÞ·¨Çø·ÖÕýÔÚÓëÖ®½»»¥µÄÊÇÕæÊµÓû§»¹ÊÇ×Ô¶¯»¯½Å±¾
Pexpectͨ¹ýÉèÖÃģʽƥÅäºÍ³¬Ê±µÈ´ý£¬À´¿ØÖƽ»»¥µÄÁ÷³ÌºÍÏìÓ¦×Ó½ø³ÌµÄÊä³ö
ÕâÖÖ»úÖÆÊ¹µÃPexpectÄܹ»×Ô¶¯»¯´¦Àí¸÷ÖÖÐèÒª½»»¥µÄÃüÁîÐй¤¾ß£¬¼«´óµØÌá¸ßÁË×Ô¶¯»¯²âÊÔºÍϵͳ¹ÜÀíµÄЧÂÊ
¶þ¡¢PexpectµÄ°²×°ÓëÅäÖà PexpectµÄ°²×°¹ý³Ì·Ç³£¼òµ¥£¬Ö»Ð輸ÐÐÃüÁî¼´¿ÉÍê³É
ÔÚ´ó¶àÊýLinux·¢ÐаæÖУ¬¿ÉÒÔͨ¹ý°ü¹ÜÀíÆ÷À´°²×°Pexpect
ÀýÈ磬ÔÚ»ùÓÚDebianµÄϵͳÖУ¬¿ÉÒÔʹÓÃÒÔÏÂÃüÁ sudo apt-get install python-pexpect ÔÚ»ùÓÚRedHatµÄϵͳÖУ¬¿ÉÒÔʹÓÃÒÔÏÂÃüÁ sudo yum install python-pexpect macOSÓû§¿ÉÒÔͨ¹ýPythonµÄ°ü¹ÜÀíÆ÷pipÀ´°²×°Pexpect
Ê×ÏÈÈ·±£ÒѾ°²×°ÁËPython£¬È»ºóÔÚÖÕ¶ËÖÐÔËÐÐÒÔÏÂÃüÁ pip install pexpect ÔÚWindowsϵͳÉÏ£¬PexpectÒ²¿ÉÒÔͨ¹ýpip°²×°
Ê×ÏÈ´ò¿ªÃüÁîÌáʾ·û»òPowerShell£¬È»ºóÔËÐÐÒÔÏÂÃüÁ pip install pexpect Èç¹ûÔÚ°²×°¹ý³ÌÖÐÓöµ½È¨ÏÞÎÊÌ⣬¿ÉÒÔ³¢ÊÔʹÓÃÒÔÏÂÃüÁîÀ´±ÜÃâȨÏÞÎÊÌ⣺ pip install pexpect --user °²×°Íê³Éºó£¬¿ÉÒÔͨ¹ýÔËÐÐÒÔÏÂPython´úÂëÀ´ÑéÖ¤PexpectÊÇ·ñÒѳɹ¦°²×°£º import pexpect print(pexpect.__version__) Èç¹ûÊä³öÁËPexpectµÄ°æ±¾ºÅ£¬ËµÃ÷°²×°³É¹¦
PexpectµÄÅäÖÃͨ³£ºÜ¼òµ¥£¬ÒòΪËüÖ÷ÒªÊÇͨ¹ýPython´úÂëÀ´¿ØÖÆÃüÁîÐгÌÐòµÄ½»»¥
²»¹ý£¬ÓÐʱºòÄã¿ÉÄÜÐèÒª¸ù¾ÝÄãµÄ»·¾³»òÕßÐèÇóÀ´µ÷ÕûһЩ²ÎÊý
ÀýÈ磬ÉèÖÃÃüÁîÖ´Ðеij¬Ê±Ê±¼ä¡¢±àÂë¡¢»·¾³±äÁ¿¡¢ÈÕÖ¾¼Ç¼ÒÔ¼°×Ô¶¨ÒåÒì³£´¦ÀíµÈ
Èý¡¢PexpectµÄÖ÷Òª¹¦ÄÜ PexpectÌṩÁ˷ḻµÄ¹¦ÄÜ£¬ÓÃÓÚʵÏÖÃüÁîÐн»»¥µÄ×Ô¶¯»¯
ÒÔÏÂÊÇһЩÖ÷Òª¹¦ÄܵÄÏêϸ½éÉÜ£º 1.Æô¶¯×Ó³ÌÐò£º PexpectʹÓÃ`spawn`ÀàÀ´Æô¶¯×Ó³ÌÐò
ÀýÈ磬Æô¶¯Ò»¸öftp¿Í»§¶ËÃüÁ child = pexpect.spawn(/usr/bin/ftp) »òÕߣ¬Ê¹ÓÃsshµÇ¼Ŀ±ê»úÆ÷£º child = pexpect.spawn(/usr/bin/ssh user@example.com) 2.Óë×Ó³ÌÐò½»»¥£º PexpectʹÓÃ`expect`·½·¨À´µÈ´ý×Ó³ÌÐò²úÉúÌØ¶¨Êä³ö£¬²¢Ê¹ÓÃ`send`»ò`sendline`·½·¨Ïò×Ó³ÌÐò·¢ËÍÖ¸¶¨ÊäÈë
ÀýÈ磬ÔÚsshµÇ¼¹ý³ÌÖУ¬µÈ´ýÃÜÂëÌáʾ²¢·¢ËÍÃÜÂ룺 child.expect(password:) child.sendline(your_password) 3.ÉèÖó¬Ê±Ê±¼ä£º ¿ÉÒÔͨ¹ýÉèÖÃ`pexpect.spawn`¶ÔÏóµÄ`timeout`²ÎÊýÀ´Ö¸¶¨µÈ´ý½á¹ûµÄ³¬Ê±Ê±¼ä
ÀýÈ磬½«Ä¬ÈϵÄ1Ã볬ʱʱ¼ä¸ÄΪ30Ã룺 child = pexpect.spawn(command, timeout=3 4.¼Ç¼ÈÕÖ¾£º ΪÁ˸üºÃµØµ÷ÊÔ£¬¿ÉÒÔÆôÓÃPexpectµÄÈÕÖ¾¼Ç¼¹¦ÄÜ
ÀýÈ磬½«ÈÕÖ¾¼Ç¼µ½Îļþ£º fout =file(mylog.txt, w) child.logfile = fout »òÕß½«ÈÕÖ¾¼Ç¼µ½±ê×¼Êä³ö£º child.logfile = sys.stdout 5.ÔËÐÐÃüÁî²¢»ñÈ¡½á¹û£º PexpectÌṩÁË`run`º¯Êý£¬¿ÉÒÔÓÃÀ´ÔËÐÐÃüÁ²¢Í¬Ê±»ñµÃÃüÁîµÄÊä³ö½á¹ûÓëÃüÁîµÄÍ˳ö״̬
ÀýÈ磺 (command_output, exitstatus) = pexpect.run