如何编写子进程.Popen终端执行

时间:2019-06-26 14:00:56

标签: python subprocess popen terminate

我想与另一个用户一起杀死远程服务器上的进程,该用户使用subprocess.Popen命令通过python创建了该进程。但我确实要绞尽脑汁,因为subprocess.Popen(['sudo','kill','-9',str(pid)], stdout=subprocess.PIPE)

没有任何反应

在终端sudo kill -9 pid中工作正常。

2 个答案:

答案 0 :(得分:1)

您的答案有效。一种更正式的方式是

from subprocess import Popen, PIPE


def kill(pid, passwd):
    pipe = Popen(['sudo', '-S', 'kill', '-9', str(pid)], 
                 stdout=PIPE, 
                 stdin=PIPE, 
                 stderr=PIPE)
    pipe.stdin.write(bytes(passwd + '\n', encoding='utf-8'))
    pipe.stdin.flush()
    # at this point, the process is killed, return output and errors
    return (str(pipe.stdout.read()), str(pipe.stderr.read()))

如果我是为生产系统编写的,那么我将添加一些异常处理,因此请将其视为概念证明。

答案 1 :(得分:-1)

好吧,我得到了Legorooj的评论。

from subprocess import call
import os
command = 'kill -9 '+str(pid)
#p = os.system('echo {}|sudo -S {}'.format(password, command))
call('echo {} | sudo -S {}'.format(password, command), shell=True)