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 ...
随机推荐
- linux磁盘分区fdisk命令详解
1.什么是分区? 分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用.分区表是一个硬盘分区的索引,分区的信息都会写进分区表.2.为什么要有多个分区? 防止数 ...
- 分布式集群HBase启动后某节点的HRegionServer自动消失问题
详细问题 我这里是,我的这个slave1的HRegionServer 进程启动后,不久自动消失. 去查看日志,排查问题: 发现问题: 解决办法 [hadoop@master h ...
- 005-C3P0连接池配置文件模板
文件名必须为:c3p0-config.xml 一般放在src目录下面 <?xml version="1.0" encoding="UTF-8"?> ...
- Mac开发利器之程序员编辑器MacVim学习总结(转)
一.关于Vim Emacs和Vim都是程序员专用编辑器,Emacs被称为神的编辑器,Vim则是编辑器之神.至于两者到底哪个更好用,网络上两大派系至今还争论不休.不过,相比之下,Emacs更加复杂, ...
- Light Table 编辑器修改字体 更新
view->command->use.behaviors 加上这一句 (:lt.objs.style/font-settings "Inconsolata" 14 1 ...
- 【Docker】通过cookie欺骗在ubuntu中使用wget下载jdk
在ubuntu系统中,如果想通过wget直接下载Orcale内的jdk文件,一般是办不到的.所以就得用特殊的方法. 首先在官网找到自己需要下载的jdk版本下载链接: 点选Accept License ...
- 设置全局theme及读取theme方法
在web.config中设置了默认的Theme,其部分如下的配置节点: <system.web> <pages theme="Default" controlRe ...
- Mybatis Dao开发的两种方式(一)
原始Dao的开发方式: 1.创建数据库配置文件db.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localh ...
- 远程连接postgresql和redis设置
1. 让Postgresql服务器被远程访问 1.1 编辑 pg_hba.conf,配置用户的访问权限 vi /etc/postgresql/8.4/main/pg_hba.conf 增加设置项 ho ...
- Zato入门part2
Zato入门part1 参考1 前提:从part已经建立了集群.服务框架并成功的调用了服务.现在我们通过HTTP.ZeroMQ和JSON使用外部服务. 除非坚持手工调用,否则服务从来不知道什么确切的U ...