我正在尝试使用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()
错误:
追踪(最近一次呼叫最后一次):
文件" ./ scr3.py",第87行,in TraceRoute()
文件" ./ 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]没有这样的文件或目录
如何解决这个问题?我永远坚持这个。请帮忙
答案 0 :(得分:3)
非常确定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)