python linux 命令_Python Linux 命令行 sudo
经常会有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相关推荐
- python网络监控程序_python linux监控程序
Pyinotify – Linux中实时监控文件系统更改 Pyinotify 是一个简单而实用的 Python 模块,它用于通过 inotify 实时监控Linux文件系统的更改.用于在Linux中实 ...
- python退出语句_python退出命令
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 要退出python命令行,我必须输入exit(). 如果我输入退出,它提示:us ...
- python路径转换为选区_Python,Linux,PS随记
Python,Linux,PS随记 python Linux PS 极客学院 Python 1.IDE下载 (a) download->window. 2.7的版本,3以上版本运行内存偏大 (b ...
- python如何选择命令_python 解析命令行选项
问题: 程序如何能够解析命令行选项 解决方案 argparse 模块可被用来解析命令行选项 argparse 模块 argparse 模块是标准库中最大的模块之一,拥有大量的配置选项 dest 参数指 ...
- python terminal调试_python执行命令行调试工具pdb
调试 pdb pdb是基于命令行的调试工具,非常类似gnu的gdb(调试c/c++). 命令简写命令作用 break b 设置断点(用法,b :在第数字行设置断点................... ...
- python调用cmd执行命令_python调用命令行,其中包含“echo”和“|”
参见英文答案 > piping in shell via Python subprocess module 4个 我试着用python调用命令行执行一些文件.但是,当有一个包含"ech ...
- python 通讯录 字典_Python实现命令行通讯录
1.实现目标 编写一个命令行通讯录程序,可以添加.查询.删除通讯录好友及电话 2.实现方法 创建一个类来表示一个人的信息.使用字典存储每个人的对象,名字作为键. 使用pickle模块永久地把这些对象存 ...
- python写通讯录_Python实现命令行通讯录实例教程
1.实现目标 编写一个命令行通讯录程序,可以添加.查询.删除通讯录好友及电话 2.实现方法 创建一个类来表示一个人的信息.使用字典存储每个人的对象,名字作为键. 使用pickle模块永久地把这些对象存 ...
- python写通讯录_Python实现命令行通讯录
1.实现目标 编写一个命令行通讯录程序,可以添加.查询.删除通讯录好友及电话 2.实现方法 创建一个类来表示一个人的信息.使用字典存储每个人的对象,名字作为键. 使用pickle模块永久地把这些对象存 ...
最新文章
- 用Python如何查快递?
- torch.meshgrid
- NR 5G UE和5G网络功能之间的安全流程
- UVA-10714 Ants---蚂蚁模拟
- 在centos7离线安装mysql_CentOS7离线安装MySQL
- 2021总结,2022展望
- linux学习-简单命令介绍及安装VMware Tools
- .NET Core with 微服务 - Consul 配置中心
- 博导眼里本科生的科研能力:“他们还在玩泥巴”
- 周杰伦新歌《说好不哭》彩蛋大汇总! | 今日最佳
- Zookeeper选举原理——FastLeaderElection
- Mybatis处理表关联(懒加载)
- java基础集合简介Map(三)下
- 人人开源项目文档_为什么图对于您的开源项目文档至关重要
- java中ajax的用途_java Ajax的应用
- ORA-01790:表达式必须具有与对应表达式相同的数据类型
- 国产机GSM系列手机常见芯片方案介绍
- 王者荣耀钓鱼网源码php,王者荣耀钓鱼页面
- Fiddler 4——手机抓包工具
- 2022 阿里 java 面经
热门文章
- vmware安装找不到虚拟网卡解决方案
- [转] Gmail 的Host解决方案
- 【干货】一文带你看透深度学习框架演进
- Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)​
- 【书单】推荐几本AI好书
- elman神经网络 python实现_Rust 能取代 Python,更好的实现神经网络?
- java用for打印正方形_java.java
- 从未在一起更让人遗憾_从未在一起和最终没有在一起,哪个更遗憾?
- python keyboard库_python利用 keyboard 库记录键盘事件
- python语法错误怎么办_python错误处理详解