我正在尝试使用python脚本在google.com上执行traceroute并将输出写入文件,即output.txt
如果我直接使用subprocess.call('traceroute','google.com'),它的工作完全正常,输出将打印在屏幕上 . 因为我想在文件中获取输出,所以我正在使用
subprocess.Popen([“tracert”,' - w','100',hostname],stdout = subprocess.PIPE,stderr = subprocess.STDOUT)
然后将管道数据写入文件 . 但是我在这行中出现错误,即OSError:[Errno 2]没有这样的文件或目录
Code :
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()
Error :
Traceback(最近一次调用最后一次):
TraceRoute()中的文件“./scr3.py”,第87行
文件"./scr3.py",第76行,在TraceRoute traceroute = subprocess.Popen(["tracert",'-w','100',hostname],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中引发child_exception
OSError: [Errno 2] No such file or directory
怎么解决这个?我永远坚持这个 . 请帮忙
1 回答
很确定它应该是
traceroute
而不是tracert
. tracert是一个windows命令,你也可以使用iter
和stdout.readline
来读取输出: