2009-12-20 8 views
3

J'ai une simple question à propos de Python:Python envoyer cmd sur socket

J'ai un autre script Python à l'écoute sur un port sur une machine Linux. Je l'ai fait afin que je puisse envoyer une demande, et il informera un autre système qu'il est vivant et à l'écoute.

Mon problème est que je ne sais pas comment envoyer cette demande d'un autre script python en cours d'exécution sur la même machine (blush)

J'ai un script en cours d'exécution à chaque minute, et je voudrais étendre à envoyez également cette demande. Je ne m'attends pas à recevoir une réponse, mon poste d'écoute-script poste à une base de données.

Dans Internet Explorer, je vous écris comme ceci: http://192.168.1.46:8193/?Ping Je voudrais savoir comment faire de Python, et de préférence juste envoyer et ne pas se bloquer si l'autre script ne fonctionne pas.

grâce Michael

Répondre

4

Il semble que vous fassiez une requête HTTP plutôt qu'un ping ICMP.

urllib2, intégré à Python, peut vous aider à le faire.

Vous devrez remplacer le délai d'attente afin de ne pas rester trop longtemps. Directement à partir de cet article, ci-dessus, voici un exemple de code que vous pouvez modifier avec le délai et l'URL souhaités.

import socket 
import urllib2 

# timeout in seconds 
timeout = 10 
socket.setdefaulttimeout(timeout) 

# this call to urllib2.urlopen now uses the default timeout 
# we have set in the socket module 
req = urllib2.Request('http://www.voidspace.org.uk') 
response = urllib2.urlopen(req) 
+1

Il n'y a pas besoin d'utiliser 'socket'; 'urllib2.urlopen()' a un argument mot-clé 'timeout'. Voir ma réponse: http://stackoverflow.com/questions/1935939/python-send-cmd-on-socket/1936923#1936923 – jfs

+0

Oui, J.F. Sebastian a raison. Un délai d'expiration a été ajouté dans Python 2.6, donc si vous utilisez cela, vous pouvez éviter d'affecter tous les sockets. – Oddthinking

0

Ceci est un peu en dehors de ma connaissance, mais cette question pourrait peut-être aider?

Ping a site in Python?

0

Considéré comme Twisted? Qu'est-ce que vous essayez d'atteindre pourrait être retiré directement de leur examples. Cela peut être exagéré, mais si vous voulez éventuellement commencer à ajouter l'authentification, l'autorisation, SSL, etc., vous pouvez tout aussi bien commencer dans cette direction.

2
import urllib2 

try: 
    response = urllib2.urlopen('http://192.168.1.46:8193/?Ping', timeout=2) 
    print 'response headers: "%s"' % response.info() 
except IOError, e: 
    if hasattr(e, 'code'): # HTTPError 
     print 'http error code: ', e.code 
    elif hasattr(e, 'reason'): # URLError 
     print "can't connect, reason: ", e.reason 
    else: 
     raise # don't know what it is 
+0

Note: Nécessite Python 2.6. – Oddthinking