经常会有python调用shell命令的需求。subprocess, os.system() 等等都是常用的方式。

但是遇到需要调用的命令需要root权限的时候,就比较麻烦了。

就是会让输入密码。

现在知道有三种解决方法:

1. Linux 特殊权限 s

2. 模块 sh

3. 修改sudoers 文件

1. Linux 特殊权限 s

文件权限除了r、w、x外还有s、t、i、a权限:

s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行。

在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能正真生效(c h m o d命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,当我们ls -l时看到rwS,大写S说明s权限未生效)。

比如 fdisk -l 命令:

bwhite@os:~$

bwhite@os:~$ fdisk -l

fdisk: cannot open /dev/ram0: Permission denied

fdisk: cannot open /dev/sda: Permission denied

bwhite@os:~$ which fdisk

/sbin/fdisk

bwhite@os:~$ sudo cp /sbin/fdisk /bin/my_fdisk

[sudo] password for bwhite:

bwhite@os:~$ sudo chmod u+s /bin/my_*

bwhite@os:~$ ll /bin/my_*

-rwsr-xr-x 1 root root 109632 1月 9 19:41 /bin/my_fdisk*

bwhite@os:~$ /bin/my_fdisk -l

Disk /dev/ram1: 64 MiB, 67108864 bytes, 131072 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 4096 bytes

I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Device Boot Start End Sectors Size Id Type

/dev/sda1 * 2048 79691775 79689728 38G 83 Linux

/dev/sda2 79693822 83884031 4190210 2G 5 Extended

/dev/sda5 79693824 83884031 4190208 2G 82 Linux swap / Solaris

bwhite@os:~$

2. 模块 sh

# -*- coding=utf-8 -*-

import sh

import os

def main():

PASSWORD = "tiger"

devide = "/dev/sdb4"

os.system("sync;sync;sync;sync")

my_sudo = sh.sudo.bake("-S", _in=PASSWORD)

try:

my_sudo.umount(device)

except:

pass

if __name__ == '__main__':

main()

3. 修改 sudoers 文件

修改 sudoers 文件,指定某个用户或组在执行指定的命令是不用输入密码

sudo visudo

# 添加下面这一行

bwhite ALL=(ALL) NOPASSWD: /bin/mv,/bin/kill # 表示 bwhite 执行指定的 sudo 命令不需要密码

# bwhite 和 ALL 中间 tab 隔开

bwhite ALL=(ALL) NOPASSWD: ALL # 表示 bwhite 执行所有 sudo 命令不需要密码

# 如果修改 sudoers 文件时,改错了东西,比如语法错误

# 可以用这个命令来修改 sudoers 文件

pkexec visudo

参考链接:

sh 下载:           https://pypi.doubanio.com/simple/sh/

http://amoffat.github.io/sh/sections/sudo.html#contrib-sudo

python linux 命令_Python Linux 命令行 sudo相关推荐

  1. python网络监控程序_python linux监控程序

    Pyinotify – Linux中实时监控文件系统更改 Pyinotify 是一个简单而实用的 Python 模块,它用于通过 inotify 实时监控Linux文件系统的更改.用于在Linux中实 ...

  2. python退出语句_python退出命令

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 要退出python命令行,我必须输入exit(). 如果我输入退出,它提示:us ...

  3. python路径转换为选区_Python,Linux,PS随记

    Python,Linux,PS随记 python Linux PS 极客学院 Python 1.IDE下载 (a) download->window. 2.7的版本,3以上版本运行内存偏大 (b ...

  4. python如何选择命令_python 解析命令行选项

    问题: 程序如何能够解析命令行选项 解决方案 argparse 模块可被用来解析命令行选项 argparse 模块 argparse 模块是标准库中最大的模块之一,拥有大量的配置选项 dest 参数指 ...

  5. python terminal调试_python执行命令行调试工具pdb

    调试 pdb pdb是基于命令行的调试工具,非常类似gnu的gdb(调试c/c++). 命令简写命令作用 break b 设置断点(用法,b :在第数字行设置断点................... ...

  6. python调用cmd执行命令_python调用命令行,其中包含“echo”和“|”

    参见英文答案 > piping in shell via Python subprocess module 4个 我试着用python调用命令行执行一些文件.但是,当有一个包含"ech ...

  7. python 通讯录 字典_Python实现命令行通讯录

    1.实现目标 编写一个命令行通讯录程序,可以添加.查询.删除通讯录好友及电话 2.实现方法 创建一个类来表示一个人的信息.使用字典存储每个人的对象,名字作为键. 使用pickle模块永久地把这些对象存 ...

  8. python写通讯录_Python实现命令行通讯录实例教程

    1.实现目标 编写一个命令行通讯录程序,可以添加.查询.删除通讯录好友及电话 2.实现方法 创建一个类来表示一个人的信息.使用字典存储每个人的对象,名字作为键. 使用pickle模块永久地把这些对象存 ...

  9. python写通讯录_Python实现命令行通讯录

    1.实现目标 编写一个命令行通讯录程序,可以添加.查询.删除通讯录好友及电话 2.实现方法 创建一个类来表示一个人的信息.使用字典存储每个人的对象,名字作为键. 使用pickle模块永久地把这些对象存 ...

最新文章

  1. Centos6部署lamp: httpd2.4+module模式
  2. 人脸识别走光引热议!原来后台能看到的不只有脸,网友已社死,审核辣哭眼...
  3. Docker 修改镜像源地址
  4. mysql Replication机制
  5. 【阿里云API】 阿里云API调用的若干说明
  6. java SSM框架
  7. 3.3.1 差错控制(检错编码)
  8. 分类(二):基于向量空间模型的文本分类
  9. html写出五个文本标签,HTML的几个常用标签
  10. URL.createObjectURL图片预览
  11. JavaScript(五)对象
  12. Qt总结之十一:内存泄漏(汇总)
  13. 系统类配置(一)【安装windows10与ubuntu16.04双系统-附镜像资源】
  14. J - X and Beasts
  15. 和shopee哪个好_shopify和虾皮shopee哪个好?虾皮shopee电商哪个平台好
  16. 车牌号上的省会简称;uni-app组件,vue组件通用,小程序可模仿
  17. teechart mysql_TeeChart的X轴为时间,多个Y轴的显示
  18. MISRA C 2004
  19. Python常用模块12-python的xlsxwriter模块(操作excel)
  20. 互联网赚钱指南!我是如何零成本空手套白狼?

热门文章

  1. BST:Transformer在推荐领域的应用
  2. ACL2021 | 把关键词生成看成集合预测问题
  3. python怎么矩阵的秩_python – 从numpy或matlab中的满秩非矩形矩阵中获取可逆方阵...
  4. java 遍历二进制_读取二进制文件并循环遍历每个字节
  5. abrels.inc.php_abrels.inc.php
  6. vue data 值如何渲染_vue源码阅读复盘-watcher模块
  7. PHP怎么使用ckeditor集成,php调用ckeditor?怎么调用ckeditor
  8. 小数加分数怎样计算讲解_“分数,小数,百分数 的互化”我这样教学,学生很快就学会了。...
  9. Leetcode每日一题:904.fruit-into-baskets(水果成篮)
  10. 数学建模-14.主成分分析PCA