2017-09-12 9 views
2

Je travaille sur un défi de programmation et ce que je dois faire est d'avoir python lancer le programme tente alors de se connecter à un port de chaussette ouverte pour envoyer des données au programme que je viens de lancer.exécutable Démarrer Python puis TCP se connecter au processus

Le programme en question lors de son lancement ouvre un écouteur sur le port 2222, lorsque vous envoyez une chaîne qu'il traitera et donner une réponse et la sortie. Mon intention est d'automatiser l'envoi de données jusqu'à ce que je trouve le bon type de données à envoyer pour obtenir le résultat que j'attends.

import socket 
import os 

msg = 0x09 
os.system(r"C:/Users/user/Desktop/myfile.exe") 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
TCP_IP = '127.0.0.1' 
TCP_PORT = 2222 
sock.connect((TCP_IP, TCP_PORT)) 
sock.send(str(msg)) 
result = sock.recv(1024) 
sock.close 
print result 

Le script lancera l'exe mais ne se connectera pas. Si j'ouvre le fichier manuellement, puis exécute le script, il communique avec succès, donc j'ai supposé qu'il s'agissait d'un problème de synchronisation. J'ai utilisé des retards de sommeil de jusqu'à 20 et le script se bloque toujours. Je ne sais pas comment je dois procéder pour être en mesure de faire ce travail.

Répondre

1

En effet, os.system attend le programme pour terminer afin qu'il retourne une valeur de sortie, voir here

Pour exécuter l'utilisation de fil indépendant subprocess

+1

Cela a parfaitement fonctionné, j'ai changé le '' os.system' de sous-processus .Popen (« C: /Users/user/Desktop/myfile.exe », stdout = subprocess.PIPE) 'et cela a fonctionné exactement comme je m'y attendais – nilats

+0

@nilats vous pouvez consulter les documents et en apprendre davantage sur les drapeaux de création et stdin/stdout changing – Abra001

+0

avec sous-processus, vous pouvez générer des discussions qui communiquent togather sans moyens externes meilleure chance avec votre défi – Abra001