2014-09-30 82 views
2

我试图连接到一个套接字文件,并将其发送一些命令:发送命令到插座与Python

#!/usr/bin/env python 

import socket 

s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) 
s.connect("/var/run/socket") 
s.send('a command here') 
data = s.recv(1024) 
s.close() 
print 'Received', repr(data) 

我错过了什么?

我是全新的Python。

在此先感谢您的帮助!

+2

你有一个服务器程序?你的程序是否引发异常?有什么问题? – falsetru 2014-09-30 14:59:33

回答

0

你不说什么实际问题或显示任何错误,但这里有一些事情要检查。

  1. 首先,插座是否真的存在?
  2. 您的客户端python进程是否有权限访问套接字文件?
  3. 是否有服务器进程正在侦听该套接字上的传入连接?

请注意,您需要客户端服务器进行通信。在客户端连接之前,服务器必须已经运行。服务器创建一个不能存在的套接字。

server.py

import os 
import socket 

address = '/tmp/socket' 
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) 
s.bind(address)  # this creates the socket file 
s.listen(1) 
r, a = s.accept() 
r.send('Hello\n') 
msg = r.recv(1024) 
print msg 
r.close() 
s.close() 
os.unlink(address) # remove the socket file so that it can be recreated on next run 

运行该服务器,然后(在另一端)运行你的客户端代码:

client.py

import socket 

server_addr = '/tmp/socket' 
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) 
s.connect(server_addr) 
s.send('a command here') 
data = s.recv(1024) 
s.close() 
print 'Received', repr(data) 
+0

是的,套接字已经存在(它是haproxy套接字)并且我有权限访问此套接字。我想发送一些信息到'show stats''show infos'这样的套接字并打印结果。 – Manfred 2014-09-30 15:25:08

+0

那么,那又怎么了?你有没有看到任何错误?您可能需要在命令后发送新行。你能打开服务器上的记录/调试吗? – mhawke 2014-09-30 15:32:56