首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Traceroute的Python和文件中的输出在Linux中显示错误( OSError:[Errno 2]没有这样的文件或目录)

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

Stack Overflow用户
提问于 2015-03-12 13:44:11
回答 1查看 7.5K关注 0票数 1

我试图使用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,没有这样的文件或目录

代码:

代码语言:javascript
复制
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没有这样的文件或目录

如何解决这个问题?我一直被困在这件事上。请帮帮忙

EN

回答 1

Stack Overflow用户

发布于 2015-03-12 13:47:44

很肯定应该是traceroute而不是tracert。tracert是一个windows命令,还可以使用iter和stdout.readline读取输出:

代码语言:javascript
复制
traceroute = subprocess.Popen(["traceroute", '-w', '100',hostname],stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

for line in iter(traceroute.stdout.readline,""):
    print(line)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29011455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档