当前位置: 移动技术网 > IT编程>脚本编程>Python > subprocess 的 Popen用法

subprocess 的 Popen用法

2019年12月12日  | 移动技术网IT编程  | 我要评论

3u8508,王杰何嘉莉,李宗瑞 吴亚馨 ed2k

使用popen方法时,需要获取输出内容时可以按如下方法获取:

 1 # -*- coding:utf-8 -*-
 2 
 3 import subprocess
 4 cmd = r"ping www.baidu.com"
 5 result = subprocess.popen(cmd, stdout=subprocess.pipe)  # 将输出内容存至缓存中
 6 print(result.stdout.read().decode("gbk"))  # 通过从缓存中读取内容并解码显示
 7 
 8 输出显示如下:
 9 正在 ping www.wshifen.com [103.235.46.39] 具有 32 字节的数据:
10 来自 103.235.46.39 的回复: 字节=32 时间=334ms ttl=39
11 来自 103.235.46.39 的回复: 字节=32 时间=340ms ttl=39
12 来自 103.235.46.39 的回复: 字节=32 时间=317ms ttl=39
13 来自 103.235.46.39 的回复: 字节=32 时间=342ms ttl=39
14 
15 103.235.46.39 的 ping 统计信息:
16     数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
17 往返行程的估计时间(以毫秒为单位):
18     最短 = 317ms,最长 = 342ms,平均 = 333ms
19 
20 
21 process finished with exit code 0

获取popen的输出时,可以通过 stdout从缓存中读出来,那怎么写到缓存中呢,只需要在popen方法的参数中带上stdout=subprocess.pipe这个关键字参数即会写入到缓存中,当然了,这个里面还有一个参数stdin这个关键字参数,这个参数可以接收到从其它管道中的输出做为这次的输入,例如:

1  import subprocess
2 child1 = subprocess.popen(["cat","/etc/passwd"], stdout=subprocess.pipe)
3 child2 = subprocess.popen(["grep","0:0"],stdin=child1.stdout, stdout=subprocess.pipe)
4 out = child2.communicate()

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网