Traceroute的Python脚本和在文件中打印输出显示Linux Mint中的错误(OSError:[Errno 2]没有这样的文件或目录)

时间:2015-03-12 13:44:11

标签: python linux networking subprocess traceroute

我正在尝试使用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]没有这样的文件或目录

代码:

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行,in     TraceRoute()

文件" ./ 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]没有这样的文件或目录

如何解决这个问题?我永远坚持这个。请帮忙

1 个答案:

答案 0 :(得分:3)

非常确定traceroute不是tracert。 tracert是一个窗口 命令,您还可以使用iterstdout.readline来读取输出:

traceroute = subprocess.Popen(["traceroute", '-w', '100',hostname],stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

for line in iter(traceroute.stdout.readline,""):
    print(line)