subprocess 模块 与终端相互交互

 

import  subprocess 
'''
sh-3.2# ls /Users/egon/Desktop |grep txt$
mysql.txt
tt.txt
事物.txt
'''
#1 Linux下,通过python运行终端代码:
res1=subprocess.Popen('ls /Users/jieli/Desktop',
                      shell=True,
                      stdout=subprocess.PIPE)
res=subprocess.Popen('grep txt$',
                      shell=True,
                      stdin=res1.stdout,  # res1.stdout是res.stdin
                      stdout=subprocess.PIPE,
                      stderr=subprocess.PIPE)  
print(res.stdout.read().decode('utf-8'))
print(res.stderr.read().decode('utf-8'))
#等同于上面,但是上面的优势在于,一个数据流可以和另外一个数据流交互,可以通过爬虫得到结果然后交给grep
res1=subprocess.Popen('ls /Users/jieli/Desktop |grep txt$',
                      shell=True,
                      stdout=subprocess.PIPE,
                      stderr=subprocess.PIPE)
print(res1.stdout.read().decode('utf-8'))
print(res.stderr.read().decode('utf-8'))

#2 windows下,通过python运行终端代码:
# dir | findstr 'test*'
# dir | findstr 'txt$'
import subprocess
res1=subprocess.Popen(r'dir C:\Users\Administrator\PycharmProjects\test\函数备课',shell=True,stdout=subprocess.PIPE)
res=subprocess.Popen('findstr test*',shell=True,stdin=res1.stdout,
                 stdout=subprocess.PIPE,stderr=subprocess.PIPE)

print(res.stdout.read().decode('gbk')) 
print(res.stderr.read().decode('gbk')) #subprocess使用当前系统默认编码,得到结果为bytes类型,在windows下需要用gbk解码

 

posted on 2018-08-04 09:11  蜗牛也是妞  阅读(353)  评论(0编辑  收藏  举报