python pexpect sendcontrol personnages principaux
Je travaille avec des pythons pexpect module pour automatiser des tâches, j'ai besoin d'aide pour comprendre la clé de caractères à utiliser avec sendcontrol. comment peut-on envoyer le controlkey ENTRER ? et pour référence future, comment pouvons-nous trouver les principaux personnages?
voici le code que j'y travaille.
#!/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
OriginalL'auteur SSSSSam | 2012-07-02
Vous devez vous connecter pour publier un commentaire.
pexpect n'a pas de
sendcontrol()
méthode. Dans votre exemple, vous avez l'air d'être en train d'essayer d'envoyer une ligne vide. Pour ce faire, utilisez:Si vous avez besoin d'envoyer de vrais caractères de contrôle, alors vous pouvez
send()
une chaîne qui contient le caractère approprié de la valeur. Par exemple, pour envoyer un control-C:ou:
Réponses au commentaire #2:
Désolé, faute de frappe je ed le nom du module -- maintenant résolu. Plus important encore, je regardais les vieux de la documentation sur noah.org au lieu de la documentation la plus récente sur SourceForge. La plus récente de la documentation ne montrent un
sendcontrol()
méthode. Elle prend un argument, qui est soit une lettre (par exemple,sendcontrol('c')
envoie un control-C) ou de l'un d'une variété de caractères de ponctuation représentant les caractères de contrôle qui ne correspondent pas aux lettres. Mais vraimentsendcontrol()
est juste une pratique wrapper autour de lasend()
méthode, qui est ce quesendcontrol()
des appels une fois après qu'elle a calculé la valeur réelle que vous voulez envoyer. Vous pouvez lire les sources pour vous-même à ligne 973 de ce fichier.Je ne comprends pas pourquoi
id.sendline('')
ne fonctionne pas, surtout étant donné qu'elle fonctionne apparemment pour l'envoi du nom d'utilisateur à la donné naissance à ftp programme. Si vous voulez essayer de l'utilisersendcontrol()
place, alors que ce serait soit:pour envoyer un caractère de Saut de ligne (ce qui est le contrôle-j, ou décimal 10) ou:
d'envoyer un Retour de Chariot (qui est control-m, ou décimal 13).
Si ceux-ci ne fonctionnent pas alors s'il vous plaît expliquer exactement ce qui arrive, et comment cela diffère de ce que tu voulais ou passera-t-il.
Vous êtes une étoile merci ottomeister, il a parfaitement fonctionné! étrange, il a travaillé avec l'id.sendcontrol('m') j et d. si je peut demander à ces lettres j,m qu'est-ce exactement sont-ils? Merci beaucoup encore pour votre aide merveilleuse. il ne pourrais pas été répondu à mieux.
Ce n'est pas de travailler sur RHEL 7.5 pour moi. Je suis en train d'essayer différentes combinaisons, mais
sendcontrol('m')
n'a pas de travail, en dépit d'être en mesure d'entrer CTRL-M à la main dans le terminal et le prévu CR.Pour moi,
send('\r\n')
,sendline('\r\n')
, ou toute combinaison de\r
et/ou\n
dans ces méthodes ont. Cependant,sendcontrol('j')
n'a jamais travaillé (dans le script ou manuellement) etsendcontrol('m')
fonctionne manuellement, mais pas dans le script.OriginalL'auteur ottomeister