Python中subprocess.Popen的使用问题---初学者求解,问个弱智问题,谢谢大家

import subprocess
import re
ping_waiting = "-w 1000";
ping_cmd = "ping";
ping_count_flag = "-n";

def ping_host_once (host,c):

ping_count = " ".join([ping_count_flag,c]) cmd_line = " ".join([ping_cmd,ping_waiting,ping_count,host]) print(cmd_line) sub = subprocess.Popen([ping_cmd,ping_waiting,ping_count,host],stdout=subprocess.PIPE) #sub = subprocess.Popen(cmd_line,stdout=subprocess.PIPE) output = sub.stdout.read().decode(“gbk”) print (output)

a = ping_host_once(“bai.com”,“5”)

上述代码运行结果如下

D:\me>test2.py
ping -w 1000 -n 5 bai.com

正在 Ping bai.com [112.90.154.3] 具有 32 字节的数据: PING:传输失败。常见故障。 PING:传输失败。常见故障。 PING:传输失败。常见故障。 PING:传输失败。常见故障。

112.90.154.3 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

如果换成 sub = subprocess.Popen(cmd_line,stdout=subprocess.PIPE) 结果就是正常的。谁知道是什么原因啊。win10 环境。。。。。。。。

D:\me>test2.py
ping -w 1000 -n 5 bai.com

正在 Ping bai.com [112.90.154.3] 具有 32 字节的数据: 来自 112.90.154.3 的回复: 字节=32 时间=71ms TTL=48 来自 112.90.154.3 的回复: 字节=32 时间=70ms TTL=48 来自 112.90.154.3 的回复: 字节=32 时间=69ms TTL=48 来自 112.90.154.3 的回复: 字节=32 时间=71ms TTL=48 来自 112.90.154.3 的回复: 字节=32 时间=72ms TTL=48

112.90.154.3 的 Ping 统计信息: 数据包: 已发送 = 5,已接收 = 5,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 69ms,最长 = 72ms,平均 = 70ms


Python中subprocess.Popen的使用问题---初学者求解,问个弱智问题,谢谢大家

4 回复

楼主试一下把 -w、1000、-n、5 分成四个参数,而不是两个参数传给 Popen ?


文档里说 args 会转换成字符串再进行系统调用;命令中的空格和特殊符号可能会导致问题。

楼上都说完了

试试这个 : https://pypi.python.org/pypi/pyping/ ?

谢谢各位,把 -w、1000、-n、5 分成四个参数,确实就没问题了,看来命令中的空格和特殊符号可能会导致问题。

回到顶部