我想在循环中使用char=getch.getch()
(while(1)
)。
我使用它时的问题就像阻塞我的循环一样:
import getch
while(1):
char=getch.getch()
a=read_data()
if (char=='a'): c=....
if (char=='b'): c=....
如果我没有放任何东西,我的循环就会被阻止......如何通过键盘获取事件来解决这个问题?
编辑:顶部是我想要做的一个示例,但如果您感兴趣,我的真实脚本就在这里。我实际上正在研究分析仪光谱,我想按一些键进行扫描:
from pylab import *
from rtlsdr import *
from bluetooth import *
import sys
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import getch
sdr=RtlSdr()
#configure device
sdr.center_freq=double(sys.argv[1]) # centrale frequency
sdr.gain=double(sys.argv[2]) #gain
sdr.sample_rate=double(sys.argv[3]) # sample rate
#configure PSD
NFFT=int(sys.argv[4]) # nb points
# Bluetooth connexion
server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
uuid="94f39d29-7d6d-437d-973b-fba39e49d4ee"
client_sock, client_info=server_sock.accept()
while (1):
samples=sdr.read_samples(256*1024)
result=psd(samples,NFFT,Fs=sdr.sample_rate/1e6,Fc=sdr.center_freq*1e6/1e6)
tab_freq=(result[1]/1e6)
value_freq=str(tab_freq)[1:-1]
value_list=[format(float(v), ".5f") for v in value_freq.split()]
value_freq2= "\n".join(value_list)
tab_pxx=result[0]
value_pxx=str(tab_pxx)[1:-1]
value_list2=[format(float(v), ".7f") for v in value_pxx.split()]
value_pxx2= "\n".join(value_list2)
client_sock.send(value_freq2+'\n'+'\n'.join(value_pxx2.split()))
char=getch.getch()
if (char=='a'):
sdr.center_freq=sdr.center_freq+0.1e6
print 'center_freq+'
if (char=='z'):
sdr.center_freq=sdr.center_freq-0.1e6
print 'center_freq-'
答案 0 :(得分:0)
如果您使用的是Windows,则可以使用msvcrt.kbhit()
查看是否有按键等待而不会阻止:
import msvcrt
import time
while True:
time.sleep(1)
if msvcrt.kbhit():
# Only if there's a keypress waiting do we get it with getch()
print "Key hit! ({})".format(msvcrt.getch())
else:
# Do something else here
print "Nothing..."
在Linux上,它更复杂,因为没有kbhit()
等效。