En utilisant Sergé de Python pour ouvrir un lien: « objet « module » n'a pas d'attribut « Popen » » Qu'est-ce?

StackOverflow https://stackoverflow.com/questions/3621432

Question

J'ai téléchargé et installé Python 2.5.4 sur mon ordinateur (mon OS est Windows XP ), téléchargé « Goggle App Engine Software Development Kit » et créé ma première application en Python, qui était un répertoire nommé helloworld qui contenait un petit fichier python avec le même nom ( helloworld.py ). Voici le contenu de ce petit fichier:


print 'Content-Type: text/plain'
print ''
print 'Hello, world!' 

Chaque fois que je courais cette application localement sur mon ordinateur avec « Goggle App Engine Software Development Kit » , mon navigateur (FireFox) m'a montré toujours une fenêtre blanche avec Bonjour, monde! est écrit.

Alors je téléchargé Twill et décompressé dans helloworld . Après avoir installé correctement Twill , j'ai pu exécuter quelques petites commandes de shell Twill. Par exemple, je pourrais tourner vers une page Web par un lien:

text alt

Alors je voulais effectuer la même opération directement à partir de Python (par exemple par l'utilisation Twill de Python.) Voici ce que page de documentation Twill dit à son sujet :


API Python sergé

Utilisation TwillBrowser Faire des extensions

sergé est essentiellement une coque mince autour du paquet de mécaniser. Toutes les commandes sont mis en oeuvre en sergé dans le fichier commands.py et pyparsing fait le travail de l'analyse de l'entrée et le convertir en commandes python (voir parse.py). Travaux de support interactif et readline est mis en oeuvre par le module cmd (à partir de la bibliothèque standard Python).

Utilisation twill de Python

Il y a deux façons assez simple à utiliser sergé de Python. (Ils sont compatibles les uns avec les autres, de sorte que vous n'avez pas besoin de choisir entre eux. Simplement l'utilisation selon le cas)

La première consiste à importer simplement toutes les commandes dans commands.py et les utiliser directement depuis Python. Par exemple,

from twill.commands import *
go("http://www.python.org/")
showforms()

Ceci a l'avantage d'être très simple, ainsi que d'être directement lié à l'ensemble documenté de commandes dans la référence des commandes.


Je décide donc d'utiliser cette façon. J'ai supprimé le contenu précédent de helloworld.py et il a donné le nouveau contenu:


from twill.commands import *
go("http://www.python.org/")
showforms()

Mais quand j'ai essayé d'exécuter ce fichier sur mon ordinateur avec « Goggle App Engine Software Development Kit » , mon navigateur, au lieu de représenter le contenu du site web www.python.org, me donne un message d'erreur: 'module' objet n'a pas d'attribut 'Popen' :

text alt

S'il vous plaît, jetez un oeil à la page entière .

Voici les trois dernières lignes de cette page:


: 'module' objet n'a pas d'attribut 'Popen'

  args = ("'module' object has no attribute 'Popen'",)

  message = "'module' object has no attribute 'Popen'" 

Quelqu'un peut-il, s'il vous plaît, expliquez-moi ce que cet attribut Popen est tout au sujet et ce que je fais mal ici?

Merci à vous tous à l'avance.


Mise à jour 1

(cette mise à jour est ma réponse àla deuxième réponse fournie ci-dessous en leoluk )

Bonjour, leoluk !!!

Je l'ai essayé de faire de cette façon:

config use_tidy 0
from twill.commands import *
go("http://www.python.org/")

mais il ne fonctionne pas. J'ai reçu ce message d'erreur:

<type 'exceptions.SyntaxError'>: invalid syntax (helloworld.py, line 1)
      args = ('invalid syntax', (r'E:\helloworld\helloworld.py', 1, 15, 'config use_tidy 0\n'))
      filename = r'E:\helloworld\helloworld.py'
      lineno = 1
      message = ''
      msg = 'invalid syntax'
      offset = 15
      print_file_and_line = None
      text = 'config use_tidy 0\n'

(Vous pouvez voir toute la page )

Avez-vous une idée de ce que cela signifie et ce qui a mal tourné?

Était-ce utile?

La solution

  

Le programme bien rangé fait un bon travail de   la production correcte HTML à partir mutilée,   pages Web cassés, eeevil. Par défaut,   twill se déroulera pages par bien rangé   avant de les traiter. Ceci est par   par défaut parce que les bibliothèques Python   qui parse HTML sont très mauvais   traitant HTML incorrecte, et   reviennent souvent sur des résultats incorrects   pages Web "monde réel".

     

Pour désactiver cette fonction, config jeu do_run_tidy 0.

Autres conseils

vous ne pouvez pas utiliser quoi que ce soit dans le moteur Google App. Twill utilisations surchargez pas disponibles sur le moteur d'application de Google pour le travail. Donc sergé est pas entièrement pris en charge par le moteur d'application.

notamment, le code tente de faire appel à une commande externe, tidy et appelant les commandes externes dans le moteur d'application ne fonctionne pas.

Je pense que vous devriez utiliser directement mechanize. Sergé communique avec le système d'une manière qui n'est pas pris en charge par Google App Engine.

import mechanize

browser = mechanize.Browser()

browser.open('http://www.python.org')

for f in browser.forms():
    print f # you'll have to extend it
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top