Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Websocket-具有时间和消息限制_Python_Websocket_Argparse - Fatal编程技术网

Python Websocket-具有时间和消息限制

Python Websocket-具有时间和消息限制,python,websocket,argparse,Python,Websocket,Argparse,我从websocket(ws://localhost:8080)获取数据,并用它执行命令行参数。下面提到的代码 python datapy.py-i 127.0.0.1-p8080 from websocket import create_connection #import ConfigParser #from test import settings import sys import argparse import socket parser = argparse.ArgumentPa

我从websocket(ws://localhost:8080)获取数据,并用它执行命令行参数。下面提到的代码

python datapy.py-i 127.0.0.1-p8080

from websocket import create_connection
#import ConfigParser
#from test import settings
import sys
import argparse
import socket 

parser = argparse.ArgumentParser()
parser.add_argument('-i', dest='ip' , help='host name / IP')
parser.add_argument('-p', dest='port' , type=int, help='port')
parser.add_argument('-t', dest='time' , type=int, help='Time (in seconds) to keep reading data from websocket. After this process will be exit. Default value is 0. For 0 it will run infinitely')
parser.add_argument('-m', dest='msg' , type=int, help='Number of message. Process will exit after receiving Number of messages. Default is 0, means runs for ever.')
args = parser.parse_args()
print(args.ip)

#ws://%s:%s" % (args.ip,args.port)
url = "ws://%s:%s" % (args.ip,args.port)
ws = create_connection(url)
print "Receiving data from the socket..."
for each in ws:
    result =  ws.recv();
    print "Received '%s'" % result
ws.close();
慰问: 正如在argparse中提到的,我想传递-m和-t-like

python data.py -i 127.0.0.1 -p 8080 -m 5 --> It will limit to only 5 messages in the console.. 
python data.py -i 127.0.0.1 -p 8080 -t 120 --> Send me the messages until 120 seconds - after that exit .... 
python data.py -i 127.0.0.1 -p 8080 -m 5 -t 120 --> for limiting to 120 seconds (2 minutes) and 5 messages - either of the condition  

在这方面,有人能帮我吗?

我无法测试,但这方面的东西应该可以用

from websocket import create_connection
#import ConfigParser
#from test import settings
import sys
import argparse
import socket 
import time

parser = argparse.ArgumentParser()
parser.add_argument('-i', dest='ip' , help='host name / IP')
parser.add_argument('-p', dest='port' , type=int, help='port')
parser.add_argument('-t', dest='time' , type=int, help='Time (in seconds) to keep reading data from websocket. After this process will be exit. Default value is 0. For 0 it will run infinitely')
parser.add_argument('-m', dest='msg' , type=int, help='Number of message. Process will exit after receiving Number of messages. Default is 0, means runs for ever.')
args = parser.parse_args()
print(args.ip)

#ws://%s:%s" % (args.ip,args.port)
url = "ws://%s:%s" % (args.ip,args.port)
ws = create_connection(url)
print "Receiving data from the socket..."
tstart = time.time()
nbmsg = 0
for each in ws:
    result =  ws.recv();
    nbmsg += 1
    if args.time is not None:
        if time.time() > tstart + args.time:
            print('Time limit reached.')
            sys.exit()
    if args.msg is not None and nbmsg >= args.msg:
        print('Message limit reached')
        sys.exit()
    print "Received '%s'" % result
ws.close();

Loic-消息部分工作完美。时间部分现在不行。。C:\Users\556718\Desktop\pythonprac>python soufnc.py-i 127.0.0.1-p 8080-t1如果我这样给出,它在1秒后不会退出。事实是您的代码不是异步的,所以时间测试是在收到消息后完成的,所以如果您在10秒钟内没有收到消息,并且t=1,则仍然需要10秒钟才能关闭程序。不过,您可以使用asyncio()或线程来解决这个问题。我来看看。我还有一个问题——如果用户想在代码运行时按Ctrl-C来中断,那么它实际上并没有退出。有没有办法解决这个问题?可能是因为
ws.recv()
使用
try/except
而没有指定异常类型(从而捕获键盘中断)。使用异步websocket客户端也可以解决此问题。也许你也可以用
signal
library来修复它:我试着用signal library。。我正在使用Windows。。Unix/linux中的信号支持。。Windows上不支持signal.pause()。。
from websocket import create_connection
#import ConfigParser
#from test import settings
import sys
import argparse
import socket 
import time

parser = argparse.ArgumentParser()
parser.add_argument('-i', dest='ip' , help='host name / IP')
parser.add_argument('-p', dest='port' , type=int, help='port')
parser.add_argument('-t', dest='time' , type=int, help='Time (in seconds) to keep reading data from websocket. After this process will be exit. Default value is 0. For 0 it will run infinitely')
parser.add_argument('-m', dest='msg' , type=int, help='Number of message. Process will exit after receiving Number of messages. Default is 0, means runs for ever.')
args = parser.parse_args()
print(args.ip)

#ws://%s:%s" % (args.ip,args.port)
url = "ws://%s:%s" % (args.ip,args.port)
ws = create_connection(url)
print "Receiving data from the socket..."
tstart = time.time()
nbmsg = 0
for each in ws:
    result =  ws.recv();
    nbmsg += 1
    if args.time is not None:
        if time.time() > tstart + args.time:
            print('Time limit reached.')
            sys.exit()
    if args.msg is not None and nbmsg >= args.msg:
        print('Message limit reached')
        sys.exit()
    print "Received '%s'" % result
ws.close();