2012-07-02 3 views
4

Я работаю с pythons pexpect module для автоматизации задач, мне нужна помощь в определении ключевых символов для использования с sendcontrol. как можно отправить кнопку управления ENTER? и для дальнейшего использования мы можем найти ключевые персонажи?python pexpect sendcontrol ключевые слова

вот код, над которым я работаю.

#!/usr/bin/env python 

import pexpect 

id = pexpect.spawn ('ftp 192.168.3.140') 

id.expect_exact('Name') 

id.sendline ('anonymous') 

id.expect_exact ('Password') 
*# Not sure how to send the enter control key 
id.sendcontrol ('???')* 

id.expect_exact ('ftp') 

id.sendline ('dir') 

id.expect_exact ('ftp') 

lines = id.before.split ('\n') 

for line in lines : 
     print line 

ответ

9

pexpect не имеет sendcontrol() метод. В вашем примере вы пытаетесь отправить пустую строку. Чтобы сделать это, используйте:

id.sendline('') 

Если вам нужно отправить символы реального управления, то вы можете send() строка, которая содержит соответствующее значение символа. Например, чтобы отправить Control-C Вы:

id.send('\003') 

или:

id.send(chr(3)) 

Ответы на комментарий # 2:

К сожалению, я typo'ed имя модуля - - теперь исправлено. Что еще более важно, я смотрел старую документацию на noah.org, а не на latest documentation at SourceForge. Более новая документация показывает метод sendcontrol(). Он принимает аргумент, который является либо буквой (например, sendcontrol('c') отправляет элемент управления-C), либо один из множества символов пунктуации, представляющих управляющие символы, которые не соответствуют буквам. Но на самом деле sendcontrol() - это просто удобная обертка вокруг метода send(), который вызывает sendcontrol() после того, как он рассчитал фактическое значение, которое вы хотите отправить. Вы можете прочитать источник для себя в line 973 of this file.

Не понимаю, почему id.sendline('') не работает, особенно учитывая, что он, по-видимому, работает для отправки имени пользователя в программу ftp. Если вы хотите попробовать использовать sendcontrol() вместо то, что будет либо:

id.sendcontrol('j') 

для передачи символа строки (который является Control-J или десятичное 10) или:

id.sendcontrol('m') 

отправить перевозки Возврат (который является управляющим-m или десятичным числом 13).

Если они не работают, пожалуйста, объясните, что именно происходит, и как это отличается от того, что вы хотели или ожидали.

+0

Привет, ottomeister, спасибо за вашу помощь. Я действительно предлагаю это. На самом деле я использую pexpect модуль python, который я прочитал в документации и нашел sendcontrol. Я попробовал это с помощью sendline (''), но это не помогло. В документации он привел пример sendcontrol ('g'), но он не объяснил, что делает g-письмо, и какой ключевой код нужно искать. – SSSSSam

+0

Ты звезда, спасибо тебе, оттомист, она отлично работала! странно, что он работал с id.sendcontrol ('m') j и d. если я могу спросить эти буквы j, m, что именно они? Большое вам спасибо за вашу замечательную помощь. он не мог получить ответ лучше. – SSSSSam

Смежные вопросы