我试图使用pip在python 3.6.0上安装pysnmp(使用pycrypto),但是我遇到了一个错误:
命令""c:\ program files(x86)\ python36-32\python.exe"-u -c"import setuptools,tokenize; file ='C:\ Users\HOME-M~1\AppData\Local\Temp\pip-build-6l69kxa5\pycrypto\setup.py'; f = getattr(tokenize,'op en',open)(file); code = f.read().replace('\ r \n','\n'); f.close(); exec(compile(code,file,'exec'))"install --record C:\用户\ HOME-M~1\AppData\Local\Temp\pip-qq93gmf_-record\install-record.txt --single- version-external-managed --compile"在C:\ Users\HOME中失败并显示错误代码1 -M~1\AppData\Local\Temp\p ip-build-6l69kxa5\pycrypto \
我不是高级用户,我无法为这个问题找到解决方案.如果您知道如何解决它,请告诉我.Python 3.5.2很容易安装.
如何让协程因超时而停止?
我不明白为什么 asyncio.wait_for() 对我不起作用。我有这样一段代码(计划实现 telnet 客户端):
def expect(self, pattern, timeout=20):
if type(pattern) == str:
pattern = pattern.encode('ascii', 'ignore')
return self.loop.run_until_complete(asyncio.wait_for(self.asyncxpect(pattern), timeout))
async def asyncxpect(self, pattern): #receives data in a cumulative way until match is found
regexp = re.compile(b'(?P<payload>[\s\S]*)(?P<pattern>%s)' %pattern)
self.buffer = b''
while True:
# add timeout
# add exception handling for unexpectedly closed connections
data = await self.loop.sock_recv(self.sock, 10000)
self.buffer += data
m = re.match(regexp, self.buffer)
if m:
payload = m.group('payload')
match = m.group('pattern')
return payload, match
Run Code Online (Sandbox Code Playgroud)
正如我所认为的,这段代码在某个时刻(在等待语句中)将控制权返回给事件循环。我认为当没有更多数据可以接收时应该发生这种情况。如果事件循环有控制权,它可以超时停止。
但是,如果服务器没有发送任何有用的(匹配的)我的代码就会在这个循环中绊倒,就在等待点。 …