我在Windows 10上,使用Python 3.7,希望启动一个子进程来读取视频,并在用户触摸键盘时停止它(我正在使用来自https://pypi.org/project/keyboard的keyboard
模块):
import subprocess
import keyboard
p1 = subprocess.call(keyboard.record(until='enter'))
p2 = subprocess.call([vlc, url_video, "vlc://quit", "&", "exit 0"])
while True:
if p1.poll():
p2.terminate()
break
if p2.poll() == None:
break
问题是启动p1
不会返回,并且正在阻止启动p2
。所以我从不进入无限循环
此代码至少有两个问题:
subprocess.call(keyboard.record(until='enter'))
首先调用keyboard.record
,直到它返回为止,然后调用subprocess.call
,返回值为keyboard.record
作为参数(这本身没有意义)^{} 也会一直阻塞,直到启动的子进程完成(除了不做您想做的事情之外,它也已经过时,因为Python 3.5)。我们可以使用
subprocess.Popen
在后台中启动子流程您没有有效地使用^{} API 。如果不希望在视频录制运行时record击键,则希望在按下特定键时触发动作。为此,^{} 函数似乎是合适的
它使用一个函数(回调函数),该函数将在按下特定键后执行。我们可以传递一个函数,该函数将终止我们启动的子进程
据我所知,这应该是可行的:
相关问题 更多 >
编程相关推荐