调用pkill来暂停python脚本中的一个类内的子进程暂停进程

时间:2017-03-28 01:16:46

标签: python multithreading ffmpeg subprocess

我有一个包含"阻塞方法"的类。在该方法中,我正在听键来执行某些操作。有问题的行动是pkill。下面我粘贴它:

def show_control(self, control):
    """docstring for control"""                                                                                                                           
    if control == True:        
        from mkchromecast.getch import getch, pause

        self.controls_msg()    
        try:                   
            while(True):       
                key = getch()  
                if(key == 'p'):     
                    if self.videoarg == True:
                        print('Pausing Casting Process...')
                        subprocess.call(['pkill', '-STOP', '-f', 'ffmpeg'])
                    ...

事实证明ffmpeg进程已暂停,但python脚本被暂停?我不明白为什么会这样。如果在常规脚本中创建相同的函数(不在类中更清楚),则不会发生这种情况。我尝试过使用multithreadingmultiprocessing模块但没有成功。我究竟做错了什么?。感谢。

1 个答案:

答案 0 :(得分:0)

我会自己回答。问题与subprocess块内的try有关。我要做的就是创建一个包含subprocess启动pkill命令的新方法:

def show_control(self, control):
"""docstring for control"""                                                                                                                           
if control == True:        
    from mkchromecast.getch import getch, pause

    self.controls_msg()    
    try:                   
        while(True):       
            key = getch()  
            if(key == 'p'):     
                if self.videoarg == True:
                    print('Pausing Casting Process...')
                    action = 'pause'
                    self.ffmpeg_handler(action)
                ...


def ffmpeg_handler(self, action): 
    if action ==  'pause':
        subprocess.call(['pkill', '-STOP', '-f', 'ffmpeg'])

请参阅here