用于 Traceroute 并在文件中打印输出的 Python 脚本在 Linux Mint 中显示错误(OSError: [Errno 2] No such file or directory)

Posted

技术标签:

【中文标题】用于 Traceroute 并在文件中打印输出的 Python 脚本在 Linux Mint 中显示错误(OSError: [Errno 2] No such file or directory)【英文标题】:Python Script for Traceroute and printing the output in file shows error( OSError: [Errno 2] No such file or directory) in Linux Mint 【发布时间】:2015-05-14 17:00:28 【问题描述】:

我正在尝试使用 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()    

错误:

Traceback(最近一次调用最后一次):

文件“./scr3.py”,第 87 行,在 TraceRoute()

文件“./scr3.py”,第 76 行,在 TraceRoute 中 traceroute = subprocess.Popen(["tracert", '-w', '100', 主机名],stdout=subprocess.PIPE, stderr=subprocess.STDOUT) init 中的文件“/usr/lib/python2.7/subprocess.py”,第 710 行 读错,写错)

文件“/usr/lib/python2.7/subprocess.py”,第 1327 行,在 _execute_child 中 引发 child_exception

OSError: [Errno 2] 没有这样的文件或目录

如何解决这个问题?我一直坚持这一点。请帮忙

【问题讨论】:

如果traceroute 在第一种情况下正常工作,为什么要在第二种情况下尝试使用tracert?我怀疑你的系统上没有这样的程序tracert,这很容易解释“没有这样的文件或目录”...... 是的,tracert 是 Windows 等效程序的名称。 【参考方案1】:

很确定它应该是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)

【讨论】:

以上是关于用于 Traceroute 并在文件中打印输出的 Python 脚本在 Linux Mint 中显示错误(OSError: [Errno 2] No such file or directory)的主要内容,如果未能解决你的问题,请参考以下文章

如何比较两个目录并在python中输出更改的文件

traceroute----追踪数据包在网络上的传输过程

Java学习 PrintWriter打印输出—用于快速输出字符到文件

python 版本traceroute和路由图片输出

多个 if 循环条件并在列中打印输出

traceroute输出分析linux - 路由器ip地址