Python学习---重点模块之subprocess
subprocess是用来执行系统程序,查看系统的模块,
查看当前目录
第一种方法:
import subprocess
# subprocess会单独自己开辟一个线程,内部是多线程
# stdout=subprocess.PIPE 利用管道将输出的内容输出由子进程转换到主进程
obj = subprocess.Popen('dir', shell=True, stdout=subprocess.PIPE)
print(obj) # <subprocess.Popen object at 0x00000000009A7B00>
print(str(obj.stdout.read(), 'gbk')) # 编码用GBK,默认在当前文件所在的文件路径

第二种更简单:
import subprocess
print(subprocess.getoutput('dir'))

第三种:利用os.system()
import os
print(os.system('dir'))
执行某个脚本/命令
# 方法一
tracker_obj = subprocess.Popen("%s %s" % (session_tracker_script, md5_str), shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
# 这个cwd命名式指定python运行的路径的
cwd=settings.BASE_DIR)
# 方法二: 根Popen的区别是,run可以让程序在后台运行
ssh_instance = subprocess.run(login_cmd, shell=True) subprocess的cwd的参数使用:
>>> import subprocess
>>> subprocess.run("pwd")
/home/omc/CityHunter
CompletedProcess(args='pwd', returncode=0)
>>> subprocess.run("pwd", cwd="/tmp")
/tmp
CompletedProcess(args='pwd', returncode=0)

Python下subprocess的交互
1>Python下的交互之subprocess.Popen
omc@omc-virtual-machine:~/sshpass-1.06$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>import subprocess
>>>subprocess.Popen("sshpass -p FTL200@HHH ssh root@192.168.25.133 -o 'StrictHostKeyChecking no'", shell=True, stderr=subprocess.PIPE, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 【远程交互】

>>> subprocess.Popen("df -h", shell=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
<subprocess.Popen object at 0x7f93b22d10f0> 【本机的命令执行】
>>> Filesystem Size Used Avail Use% Mounted on
udev 472M 0 472M 0% /dev
tmpfs 99M 6.2M 93M 7% /run
/dev/sda1 14G 4.9G 8.2G 38% /
tmpfs 492M 188K 492M 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 492M 0 492M 0% /sys/fs/cgroup
tmpfs 99M 28K 99M 1% /run/user/108
tmpfs 99M 0 99M 0% /run/user/1000
从上可以看出,subprocess.Popen并不能实现远程机器的实时交互,所有的输出信息都输入到了管道里,需要手动去读取内容,此时就无法实现输入信息了,所以实时交互用subprocess.Popen不行;但却可以达到本机的命令解析的效果。
2>Python下的交互之subprocess.run
omc@omc-virtual-machine:~/sshpass-1.06$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>>subprocess.run("sshpass -p FTL200@HH ssh root@192.168.25.133 -o 'StrictHostKeyChecking no'", shell=True)
Last login: Mon May 7 07:01:56 2018 from 192.168.25.110
[root@localhost ~]# ifconfig|grep eth2
eth2 Link encap:Ethernet HWaddr 00:0C:29:E4:35:5D

总结一下:python直接切换Linux下的shell可以用Python下的subprocess的run()来实现实时的交互。【超牛逼】
Python学习---重点模块之subprocess的更多相关文章
- Python学习---重点模块的学习【all】
time [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...
- day30 python学习 struct模块和 subprocess 模块
import subprocess import struct aa=input('>>') obj=subprocess.Popen(aa,shell=True,#aa代表的是读取字符串 ...
- Python学习---重点模块之re
正则表达式是用来操作字符串,但是字符串提供的正则是完全匹配,有时候我们需要进行模糊匹配,这个时候就需要正则表达式了.通过re模块来实现,由C语言来执行底层的匹配 字符匹配(普通字符,元字符): 1 普 ...
- Python学习---重点模块之logging
日志级别 日志级别 critical > error > warning > info > debug, 默认是从warning开始打印 import logging # 日 ...
- Python学习---重点模块之configparse
configparse模块常用于生成和修改常见的配置文档 生成配置模块:用字典写 import configparser config = configparser.ConfigParser() co ...
- Python学习---重点模块之json
注意:JSON不能转换类,不能转换函数 重点方法示例 json.dumps():实现文件写入,字符串转换[写入文件当然是JSON字符串楼] 实际上,json.dumps()只是帮我们做了一个字符串的转 ...
- Python学习---重点模块之pickle
仅仅支持Python里面的函数等相关功能的实现,而且pickle写入的内容是看不出来的,读取的时候要求有原内容 pickled的写入: import pickle def fun(): print(' ...
- Python学习---重点模块之shelve
简单示例 import shelve f = shelve.open(r'shelve.txt') f['info'] = {'name':'ftl', 'age':23, 'sex': 'male' ...
- Python学习---重点模块之xml
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单 数据准备 <?xml version="1.0"?> <data&g ...
随机推荐
- 《C++ Primer(第五版)》知识巩固
运行平台:ubuntu 12.04/GCC 4.8.0 第二章:基本内置类型 1.decltype类型指示符 当我们从表达式的类型来推断要定义的类型时,可以使用decltype()来解析:declty ...
- Python学习--两种方法爬取网页图片(requests/urllib)
实际上,简单的图片爬虫就三个步骤: 获取网页代码 使用正则表达式,寻找图片链接 下载图片链接资源到电脑 下面以博客园为例子,不同的网站可能需要更改正则表达式形式. requests版本: import ...
- mac下 mysql 插入中文乱码解决
搞了好几个小时,终于搞定了 乱码根本原因还是编码方式不同造成的,只要编码方式统一就没问题 1. 进入 mysql 命令行, 用 show variables like 'character_set_% ...
- ckeditor添加代码插入功能及高亮显示(插件)
Auto SyntaxHighlighter SyntaxHighlighter CKEditor Button 下载以上两个插件,启用 以下可有可无: (设置在编辑器的显示样式) ckeditor高 ...
- springboot定时任务,去掉指定日期
今天用springboot写到一个需求:每周定时发送任务,但是要避开法定节假日. 网上找了些博客看,主要参考了https://www.cnblogs.com/lic309/p/4089633.html ...
- 记一个bug的排查过程---复盘
公众号做了新需求:菜单的click事件,支持多条客服消息. 上线后,只有一个功能不好使,是点击菜单,预期发一条文本类型的客服消息. 实际操作时,点这个菜单项后,什么也没有发生. elk上看日志,也没有 ...
- 【vm安装vmtools】
使用sudo ./安装命令 对vmware-tools-distrib文件夹里面vmware-install.pl文件夹进行安装 sudo ./vmware-install.pl
- maven配置编译器的版本
发现每次启动idea时,项目里很多红色错误,都是的编译器版本不对,每次都要手动修改. 其实在pom里把默认编译器版本加进去就好了. <build> <plugins> < ...
- Dell解决黑苹果网卡(BCM94352ZAE/DW1560)怎么都打不开WiFi
Dell解决黑苹果网卡(BCM94352ZAE/DW1560)怎么都打不开WiFi 2017年10月20日17:41:00 by SemiconductorKING 本来觉得驱动这个网卡不是个问题,以 ...
- java swing画图片爱心
第一次用swing做一个可视化程序,写第一篇随笔,有写的不好的地方请多多见谅.上个星期三在网上看到一个画爱心的软件,就想着自己用java也实现一个程序,画爱心用到的数学函数知识在网上百度的,不是本人原 ...