2015-03-12 7 views
1

Я пытаюсь выполнить traceroute на google.com, используя скрипт python, и написать вывод на file ie output.txtPython Script for Traceroute и печать результата в файле показывает ошибку (OSError: [Errno 2] Нет такого файла или каталога) в Linux Mint

Если я непосредственно использую subprocess.call ('traceroute', 'google.com'), он отлично работает, и выход печатается на экране. Поскольку я хочу получить результат в файле, я использую

Подпроцесс.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 (самый последний вызов последний):

Файл "./scr3.py", line 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

Если 'traceroute' работает правильно в одном случае, почему вы пытаетесь использовать' tracert' во втором случае? Я подозреваю, что в вашей системе нет такой программы 'tracert', которая легко объяснила бы« Нет такого файла или каталога »... – twalberg

+0

Да,' tracert' - это имя эквивалентной Windows программы. – davidedb

ответ

3

Довольно уверен, что это должно быть traceroute не 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)