如何编写 subprocess.Popen 终端执行
How to write a subprocess.Popen terminal execution
我想与另一个用户一起终止远程服务器上的一个进程,该用户使用 subprocess.Popen
命令通过 python 创建了该进程。但是我肯定做错了什么,因为当我 运行:
时什么也没有发生
subprocess.Popen(['sudo','kill','-9',str(pid)], stdout=subprocess.PIPE)
在终端 sudo kill -9 pid
中工作正常。
好的,感谢 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)
您的回答有效。一种更正式的方式是
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()))
如果我是为生产系统编写此代码,我会添加一些异常处理,因此请将其视为概念验证。
我想与另一个用户一起终止远程服务器上的一个进程,该用户使用 subprocess.Popen
命令通过 python 创建了该进程。但是我肯定做错了什么,因为当我 运行:
subprocess.Popen(['sudo','kill','-9',str(pid)], stdout=subprocess.PIPE)
在终端 sudo kill -9 pid
中工作正常。
好的,感谢 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)
您的回答有效。一种更正式的方式是
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()))
如果我是为生产系统编写此代码,我会添加一些异常处理,因此请将其视为概念验证。