Linux中Python自动输入sudo 密码【管道 sudo参数 stdin&stdout】

一、背景和需求

背景:

由于docker服务进程都是以root帐号的身份运行的,所以用docker跑abpred出来的文件所有者都是root,

而我作为一般用户,操作这个文件不够权限,运行代码时需要sudo 后输入密码。

 

需求:

python中调用shell 执行命令后,自动输入密码。

 

下面图片是对应说明,可以跳过直接进入下一部分。

代码:

 运行记录(sudo需要输入密码):

 生成的文件的属性及所有者:

 

二、解决方案

管道+sudo -S:

os.system('echo %s | sudo -S %s' % (password, command))

 

三、原理  

sudo的-S参数 含义是:从标准输入读取密码 

管道前输出的密码作为sudo -S 的stdin,从而达到自动输入密码的作用。

 注意:-S 是大S  小写s作用不一样

附sudo的文档:

 

 

四、成功截图

 

 

 

五、参考文档

//www.cnblogs.com/chengmo/archive/2010/10/21/1856577.html   # 管道

//www.cnblogs.com/badboy200800/p/11121880.html     # stdin和stdout

//blog.csdn.net/u013948858/article/details/78429954

//segmentfault.com/a/1190000004950264

//miracle.blog.csdn.net/article/details/106996464

//blog.csdn.net/ITzhangdaopin/article/details/79108975

//blog.csdn.net/chengyq116/article/details/100709443

 

PS:

摸索了好一阵,希望对读者有帮助。