在Linux Mint中,用于traceroute并将输出打印到文件的Python脚本显示错误(OSError:[Errno 2]没有这样的文件或目录)。

19 浏览
0 Comments

在Linux Mint中,用于traceroute并将输出打印到文件的Python脚本显示错误(OSError:[Errno 2]没有这样的文件或目录)。

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

错误:

Traceback (most recent call last):

File \"./scr3.py\",line 87,in TraceRoute()

File \"./scr3.py\",line 76,in TraceRoute

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

File \"/usr/lib/python2.7/subprocess.py\",line 710,in init

errread,errwrite)

文件“/usr/lib/python2.7/subprocess.py”,第1327行,_execute_child

raise child_exception

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

如何解决这个问题?我已经陷入了这个问题很久。请帮帮我。

admin 更改状态以发布 2023年5月23日
0
0 Comments

很确定应该使用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)

0