用于 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 是一个窗口
命令,你也可以使用iter
和stdout.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)的主要内容,如果未能解决你的问题,请参考以下文章