我试图使用python脚本在google.com上执行traceroute,并将输出写到一个文件(即output.txt )中。
如果我直接使用subprocess.call('traceroute','google.com'),它的工作非常好,输出将被打印在屏幕上。因为我想在文件中获得输出,所以我使用
subprocess.Popen("tracert",'-w','100',主机名,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
然后将管道数据写入文件。但是,我在这一行中得到了一个错误,即OSError: Errno 2,没有这样的文件或目录
代码:
import urllib
import time
import datetime, threading
from bs4 import BeautifulSoup
import urllib2
import subprocess
import socket
fp2=open("output.txt",'w')
#This function will be executed after every x minutes
def TraceRoute():
hostname="google.com"
fp2.write(hostname+" : ")
print(hostname)
#subprocess.call(['traceroute',hostname])
traceroute = subprocess.Popen(["tracert", '-w', '100', hostname],stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while (True):
hop = traceroute.stdout.readline()
if not hop: break
print '-->',hop
fp2.write( hop )
threading.Timer(60*50, TraceRoute).start() #Ensures periodic execution of TraceRoute( ) x=60*50 seconds
TraceRoute() 错误:
回溯(最近一次调用):
文件"./scr3.py",第87行,在TraceRoute()中
文件"./scr3.py",第76行,在TraceRoute traceroute = subprocess.Popen("tracert",'-w','100',主机名,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)文件"/usr/lib/python2.7/subprocess.py“中,第710行,在init errread,errwrite中
文件"/usr/lib/python2.7/subprocess.py",第1327行,在_execute_child raise child_exception中
OSError: Errno 2没有这样的文件或目录
如何解决这个问题?我一直被困在这件事上。请帮帮忙
发布于 2015-03-12 13:47:44
很肯定应该是traceroute而不是tracert。tracert是一个windows命令,还可以使用iter和stdout.readline读取输出:
traceroute = subprocess.Popen(["traceroute", '-w', '100',hostname],stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(traceroute.stdout.readline,""):
print(line)https://stackoverflow.com/questions/29011455
复制相似问题