Python 如何编写subprocess.Popen终端执行

Python 如何编写subprocess.Popen终端执行,python,subprocess,popen,terminate,Python,Subprocess,Popen,Terminate,我想用另一个用户杀死远程服务器上的一个进程,该用户使用subprocess.Popen命令通过python创建该进程。但我肯定做错了什么,因为我跑步时什么也没发生: subprocess.Popen['sudo','kill','-9',strpid],stdout=subprocess.PIPE 在终端sudo kill-9中,pid工作正常。好的,多亏了Legoroj的评论,我得到了答案 from subprocess import call import os command = 'kil

我想用另一个用户杀死远程服务器上的一个进程,该用户使用subprocess.Popen命令通过python创建该进程。但我肯定做错了什么,因为我跑步时什么也没发生:

subprocess.Popen['sudo','kill','-9',strpid],stdout=subprocess.PIPE
在终端sudo kill-9中,pid工作正常。

好的,多亏了Legoroj的评论,我得到了答案

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) 

你的答案有效。一种稍微正式一点的方法是

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()))

如果我是为生产系统写这篇文章的,我会添加一些异常处理,因此请将其视为概念证明。

您有任何错误吗?你是如何传递sudo密码的?试试os.system'sudo kill-9 pid'@heemayl没有错误,但你是对的,我不知怎么传递了sudo密码'但是怎么传递?@legoroj也尝试了这个,什么都没有发生,我想Heemail是对的我需要传递sudo密码somehow@Sav瓦勒可能不想让无密码sudo作为他们机器上的默认值。很高兴知道我帮了忙!顺便说一句,你应该选择这个作为正确答案,这样它就会显示为已回答。这肯定是一个改进-从安全角度来看更安全。