from PIL import Image
import time
import subprocess
for i in bio:
p = subprocess.Popen(["C:\Program Files\IrfanView\i_view64.exe",'C:\\Users\Moondra\\Bioteck_charts\{}.png'.format(i)])
time.sleep(5)
p.kill()
这是我目前的代码。 我在Windows 7上。我正在遍历列表,对于每个元素,我打开一张图片,然后在5秒后关闭它。但是,如果我想更长时间地研究图像然后能够从我离开的地方恢复循环,我希望能够暂停这个循环。
Psudo-code是这样的:
from PIL import Image
import time
import subprocess
for i in bio:
p = subprocess.Popen(["C:\Program Files\IrfanView\i_view64.exe",'C:\\Users\Moondra\\Bioteck_charts\{}.png'.format(i)])
time.sleep(5)
if Keypress == 'Spacebar':
pause
if Keypress =="Spacebar": resume
p.kill()
我看到这两个线程,但是一个超过9年(在用户输入上)并且使用线程(我不是很熟悉)看起来都很复杂。
用户输入:
How to get user input during a while loop without blocking
暂停循环:
Python - using [spacebar] to pause for loop
有没有一种干净的方式来做我想做的事情?
编辑:
使用msvcrt
from msvcrt import getch
while True:
key = ord(getch())
print(key)
if key == 27: #ESC
break
似乎输出255(一遍又一遍)。
如果按esc
,则没有反应和循环不会中断。
尽管按下不同的键,打印的数字(255)也不会改变。
更新:
我正在以不同的方式尝试它。不确定这是否更好,但是,我发现了一个名为keyboard
的模块,它知道按键输入(并且在使用它之后,似乎工作正常)。
我试图使用线程来做到这一点,但似乎我没有得到线程正确的时机。我认为问题是当我的线程中调用了time.sleep()时,我的按键不被读取。
来自线程导入线程 导入键盘 导入子流程 进口泡菜
def keyboard_press():
while p == True:
if keyboard.is_pressed('down') == True:
print('yes')
input()
p.kill()
#continue
with open('C:\\Users\Moondra\\Bioteck.pickle', 'rb') as file:
bio = pickle.load(file)
for i in bio[:5]:
p = subprocess.Popen(["C:\Program Files\IrfanView\i_view64.exe",'C:\\Users\Moondra\\Bioteck_charts\{}.png'.format(i)])
from threading import Thread
t = Thread(target = keyboard_press, args =())
t.start()
t.join()
time.sleep(3)
p.kill()