首页 文章

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

提问于
浏览
1

我正在尝试使用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 回答

  • 3

    很确定它应该是 traceroute 而不是 tracert . tracert是一个windows命令,你也可以使用 iterstdout.readline 来读取输出:

    traceroute = subprocess.Popen(["traceroute", '-w', '100',hostname],stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    
    for line in iter(traceroute.stdout.readline,""):
        print(line)
    

相关问题