我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python2有os.system,除了os.system可以调用系统命令,,commands,popen2等也可以,比较乱,于是官方推出了subprocess,目地是提供统一的模块来实现对系统命令或脚本的调用.

 import subprocess

 a = subprocess.run(["ipconfig", "-3all"],stdout = subprocess.PIPE,stderr = subprocess.PIPE,check=True)   # 执行一条系统命令
## stdou用来输出命令结果,stderr是错误提示.check如果出错,会报一个错误.
#print(a.stderr)
#b = subprocess.run("df -h |grep disk1",stdout = subprocess.PIPE,stderr = subprocess.PIPE,shell=True) # 如果有管道符要用这种方法 ##标准写法 # subprocess.run(['df','-h'],stderr=subprocess.PIPE,stdout=subprocess.PIPE,check=True)
# #涉及到管道|的命令需要这样写
#
# subprocess.run('df -h|grep disk1',shell=True) #shell=True的意思是这条命令直接交给系统去执行,不需要python负责解析 subprocess.call(["ipconfig", "-all"]) #执行命令,返回命令执行状态 , 0 or 非0
retcode = subprocess.call(["ls", "-l"]) #执行命令,如果命令结果为0,就正常返回,否则抛异常
subprocess.check_call(["ls", "-l"])
0 #接收字符串格式命令,返回元组形式,第1个元素是执行状态,第2个是命令结果
subprocess.getstatusoutput('ls /bin/ls')
(0, '/bin/ls') #接收字符串格式命令,并返回结果
subprocess.getoutput('ls /bin/ls')
'/bin/ls' #执行命令,并返回结果,注意是返回结果,不是打印,下例结果返回给res
res=subprocess.check_output(['ls','-l'])
res
# b'total 0\ndrwxr-xr-x 12 alex staff 408 Nov 2 11:05 OldBoyCRM\n'
a = subprocess.run(["sleep 10"],stdout = subprocess.PIPE,shell=True)
a = subprocess.Popen(["sleep 10"],stdout = subprocess.PIPE,shell=True)
print(a.poll()) # a.poll() 返回执行状态,0是正常.非零不正常
a.wait() # 等待命令就结束
terminate()终止所启动的进程Terminate the process with SIGTERM kill() 杀死所启动的进程 Kill the process with SIGKILL communicate()与启动的进程交互,发送数据到stdin,并从stdout接收输出,然后等待任务结束

最新文章

  1. PHP用户注册与登录【1】
  2. C#对图片文件的压缩、裁剪操作初探
  3. git和svn
  4. TCP && UDP
  5. 如何在 Linux 终端中知道你的公有 IP
  6. 入口点函数的19种消息,AcRxArxApp只处理16种。
  7. leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)
  8. “Microsoft Visual Studio遇到了问题,需要关闭”解决办法
  9. mysql自动备份策略
  10. kali2.0 系统自带截图功能
  11. Java多线程初学者指南(8):从线程返回数据的两种方法
  12. PHP 7 探针的安装与测试
  13. Android访问设置
  14. 不容易理解的 lock 和 merge
  15. Quick Cocos2dx controller的初步实现
  16. angular的时间指令 以及防止闪烁问题
  17. CentOS6.5 64位下安装部署Ansible
  18. 【RL-TCPnet网络教程】第9章 RL-TCPnet网络协议栈移植(uCOS-III)
  19. linux应用以及常用命令
  20. Servlet案例4:用户注册

热门文章

  1. (转)Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例
  2. 用js检测文本框中输入的是否符合条件并有错误和正确提醒
  3. MySQL高级知识(六)——索引优化
  4. 为什么一定要学习linux系统?
  5. SDOI2014 R1做题笔记
  6. 【转】java将excel文件转换成txt格式文件
  7. 【编辑器】Visual Studio Code
  8. 【angularjs】使用angular搭建项目,pc端实现网页中的内容不可复制
  9. 【vue】vue +element 搭建及开发中项目中,遇到的错误提示
  10. 【vue】vue中ref用法