2009-05-31 4 views
1

Excusez mon ignorance car je suis encore un débutant en codage. Je suis en train de convertir un script python que j'ai écrit dans un programme exécutable Windows en utilisant py2exe. Cependant, bien que je réussisse à convertir le script, l'exécutable ne semble pas complètement fonctionnel.py2exe - l'exécutable généré se bloque lors de la connexion au socket

Après le débogage beaucoup, je l'ai isolé la cause et le code suivant semble être le problème

host = str(raw_input('Enter Host IP Address: ')) 
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
client_socket.connect((host, 5000)) 

Le problème ne se produit pas lorsque le script est exécuté à partir Pydev lui-même et le script est capable de fonctionner sans problèmes. L'exécutable Windows qui est une application console se bloque lorsque vous essayez de vous connecter à un autre hôte.

Est-ce un problème connu ou est-ce que je fais quelque chose de mal? Toute aide est très appréciée.

+0

Peut-être essayer d'attraper les exceptions qui sont levées? Aussi peut-être vérifier quelle est la valeur du délai d'expiration? –

+0

Je sais peut-être un peu moins quand j'écris un programme similaire dans vb.net je dois utiliser le filetage en arrière-plan lorsque ping/connexion à d'autres machines parce que la commande socket connect peut bloquer le fil principal du programme, peut-être – Jim

+0

@Brian R. Bondy - Aucune exception où jeté. Le programme est censé se connecter à un serveur local et je n'ai pas défini de valeur de délai d'attente. – kouei

Répondre

1

Etes-vous capable d'entrer l'adresse IP? Lecture that thread il semble que py2exe nécessite un argument spécial windows pour lancer une console. Sinon, raw_input essaie de lire depuis l'entrée standard et se bloque/se bloque car il ne trouve rien.

Étant donné l'âge du sujet, j'ai vérifié py2exe doc: vous pouvez essayer de placer votre script dans l'attribut de la console.

Je pense vraiment que le comportement est lié à raw_input, et qu'il est pas causé par l'opération de socket.

+0

Bonjour. J'utilise l'argument "console" dans mon setup.py et l'application de la console vous invite à entrer. Si je devais commenter l'opération de socket et que mon script imprime l'entrée (pour l'adresse IP de l'hôte), cela fonctionnerait bien. En tant que tel, j'ai supposé que c'était en raison de la connexion. :/ – kouei

+0

Ensuite, puisque la connexion est bloquante, en attente de l'autre extrémité de répondre, vous devriez essayer de mettre en place un délai sur client_socket avant d'essayer de se connecter. (le délai d'attente par défaut est None, ce qui signifie que si votre serveur est cassé, le client attendra pour toujours). Si une erreur SocketError "expirée" se produit, cela signifie que le serveur n'écoute pas/que la mauvaise adresse est utilisée :) – NicDumZ

Questions connexes