UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)

Hoàng Tuấn Việt vietht2 at viettel.com.vn
Tue Nov 19 03:39:56 EST 2013


Hi Terry,

Thanks for your comment.

 

>To better help us help you, what exact version of Python?

I use Python 2.7.5

 

>Please post plain text without html.

Sorry, I will do it.

 

>Please post programs single spaced with just occasional blank lines.

 

File my_program.py

 

import wx.aui

import paramiko

import telnetlib

from LinuxHostPage import *

from WindowsHostPage import *

from AIXHostPage import *

Publisher = pub.Publisher()

TIMEOUT = 3

 

class MainWindow(wx.Frame):

    def __init__(self, parent, title):

        

        self.os = ''

        self.connection = []

        

        wx.Frame.__init__(self, parent, title=title)

        self.SetBackgroundColour('LightGray')

        

        # A Statusbar in the bottom of the window

        self.CreateStatusBar() 

        self.SetStatusText("Please input credentials.")

        

        # Publisher

        Publisher().subscribe(self.change_statusbar, 'change_statusbar')

        

        # Input box

        self.input_panel = wx.Panel(self)

        self.host = wx.StaticText(self.input_panel, -1, 'Host')

        self.host_entry = wx.TextCtrl(self.input_panel)

        self.username = wx.StaticText(self.input_panel, -1, 'Username')

        self.username_entry = wx.TextCtrl(self.input_panel)

        self.password = wx.StaticText(self.input_panel, -1, 'Password')

        self.password_entry = wx.TextCtrl(self.input_panel, style = wx.TE_PASSWORD)

        self.connect_btn = wx.Button(self.input_panel, -1, 'Connect')

        ## List box

        self.os_text = wx.StaticText(self.input_panel, -1, 'OS')

        self.choice_list = wx.Choice(self.input_panel, choices=['Redhat', 'SuSE', 'Windows', 'Solaris', 'AIX'])

        self.choice_list.SetSelection(2)

        

        self.input_sizer = wx.BoxSizer(wx.HORIZONTAL)

        self.input_sizer.Add((7,0))

        self.input_sizer.Add(self.os_text, flag = wx.ALIGN_CENTER)

        self.input_sizer.Add((7,0))

        self.input_sizer.Add(self.choice_list, flag = wx.ALIGN_CENTER)

        self.input_sizer.Add((7,0))

        self.input_sizer.Add(self.host, flag = wx.ALIGN_CENTER)

        self.input_sizer.Add((7,0))

        self.input_sizer.Add(self.host_entry, flag = wx.ALIGN_CENTER)

        self.input_sizer.Add((7,0))

        self.input_sizer.Add(self.username, flag = wx.ALIGN_CENTER)

        self.input_sizer.Add((7,0))

        self.input_sizer.Add(self.username_entry, flag = wx.ALIGN_CENTER)

        self.input_sizer.Add((7,0))

        self.input_sizer.Add(self.password, flag = wx.ALIGN_CENTER)

        self.input_sizer.Add((7,0))

        self.input_sizer.Add(self.password_entry, flag = wx.ALIGN_CENTER)

        self.input_sizer.Add((7,0))

        self.input_sizer.Add(self.connect_btn, flag = wx.ALIGN_CENTER)

        

        self.input_panel.SetSizer(self.input_sizer)

                       

        # Function panel

        self.notebook = wx.aui.AuiNotebook(self)

        

        # Top Sizer

        self.sizer = wx.BoxSizer(wx.VERTICAL)

        self.sizer.Add((0,7))

        self.sizer.Add(self.input_panel, border = 10)

        self.sizer.Add((0,7))

        self.sizer.Add(self.notebook, 1, wx.EXPAND)

        self.sizer.Add((0,7))

        

        self.SetSizerAndFit(self.sizer)

        

        # Show Frame

        self.Show()

 

        # Events

        self.connect_btn.Bind(wx.EVT_BUTTON, self.on_connect)

        self.Bind(wx.EVT_CLOSE, self.on_close)

        

    def change_statusbar(self, msg):

        self.SetStatusText(msg.data)

        

    def ssh(self, host, username, password):

        connection = paramiko.SSHClient()

        connection.set_missing_host_key_policy(paramiko.AutoAddPolicy())

        connection.connect(host, 22, username, password)

        stdin, stdout, stderr = connection.exec_command('ls')

        stdin.write('expected_input\n')

        stdin.flush()

        return connection

    

    def telnet(self, host, os, username, password):

        connection = telnetlib.Telnet(host)

        connection.read_until('login: ')

        connection.write(username + '\r')

        connection.read_until('assword: ')

        connection.write(password + '\r')

        if os == 'windows':

            connection.read_until('>', timeout = TIMEOUT)

        elif os == 'aix':

            connection.read_until('#', timeout = TIMEOUT)

        return connection

    

    def get_os(self):

        os = self.choice_list.GetLabel()

        return os.lower()

    

    def on_connect(self, event):

        self.os = self.get_os()

        self.connect_btn.Disable()

        host = self.host_entry.GetValue()

        username = self.username_entry.GetValue()

        password = self.password_entry.GetValue()

        self.SetStatusText('Connecting... Please wait.')

        self.connect_btn.Disable()

            

        if self.os == 'redhat' or self.os == 'suse':

            self.connection = self.ssh(host, username, password)

            page = LinuxHostPage(self, self.connection, self.os, Publisher)

        elif self.os == 'windows':

            self.connection = self.telnet(host, self.os, username, password)

            page = WindowsHostPage(self, self.connection, self.os, Publisher)

        elif self.os == 'aix':

            self.connection = self.telnet(host, self.os, username, password)

            page = AIXHostPage(self, self.connection, self.os, Publisher)

            

        self.SetStatusText('Connected')

        self.connect_btn.Enable()

        # Connection tab

        self.notebook.AddPage(page, host, select = True)

                

    def close_connection(self):

        self.connection.close() 

        

    # Clean up and close

    def on_close(self, event):

        self.close_connection

        self.Destroy()

        

    def on_gen(self, event):

        # Validate inputs

        if self.src_input.GetLabel() == '' or self.protocol_input.GetLabel()=='':

            # Set status bar

            wx.MessageBox('Please input all required fields!', 'Info', wx.OK | wx.ICON_INFORMATION)

            return

        

        # Src IP

        src_ip = '-s ' + self.src_input.GetLabel()

 

        # Protocol

        proto = '-p ' + self.protocol_input.GetLabel().lower()

        

        # Src port

        src_port = self.src_port_input.GetLabel().lower().strip()

        if  src_port == '(optional)' or src_port == '':

            src_port = ''

        else:

            src_port = '--sport ' + src_port 

            

        # Dst port

        dst_port = self.dst_port_input.GetLabel().lower().strip()

        if  dst_port != '':

            dst_port = '--dport ' + dst_port 

            

        # Target

        target = self.target_input.GetLabel().strip()

        if target == '(optional)' or target == '':

            target = '-j ACCEPT'

        else:

            target = '-j ' + target.upper()

            

        # Rule

        if src_port == '':

            rule = '{:10s}{:30s}{:10s}{:20s}{:22s}{:20s}'.format('-A INPUT', src_ip, proto, dst_port, '-m state --state NEW', target)

        else:

            rule = '{:10s}{:30s}{:10s}{:20s}{:20s}{:22s}{:20s}'.format('-A INPUT', src_ip, proto, src_port, dst_port, '-m state --state NEW', target)

        

        self.rule.Clear()

        self.rule.WriteText(rule)

        self.rule.Enable()

        

        # Set status bar

        self.set_status_bar('Generated rule successfully.')

        

    def set_status_bar(self, str):

        Publisher().sendMessage(('change_statusbar'), str)

            

app = wx.App(False)

frame = MainWindow(None, "Firewall Management Tool")

frame.Maximize()

app.MainLoop()

 

 

I can run the program in Eclipse and telnet successfully to a Windows host.

 

But when I export to .exe file by py2exe:

 

python gen_exe.py py2exe

 

 

File gen_exe.py:

 

from distutils.core import setup

import py2exe

 

setup(

    options = {

            "py2exe":{

            "packages": ['wx.lib.pubsub'],

            "dll_excludes": ["MSVCP90.dll", "HID.DLL", "w9xpopen.exe"],

        }

    },

    console = [{'script': ‘my_program.py'}]

)

 

When I run my_program.exe, this error is displayed:

 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)

 

at line:

 

       connection.write(username + '\r')

 

--

Viet

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20131119/ffe23275/attachment.html>


More information about the Python-list mailing list