《Python 高手之路》读书笔记 <一>



《Python 高手之路》这本书很不错,翻译的也部分到位!先贴一段介绍:

 Python 是一门优美的语言, 它快速,灵活且内置了丰富的标准库, 已经用于越来越多的不同领域。 通常大多数关于 Python 的书都会教读者这门语言的基础知识, 但是掌握了这些基础知识后, 读者在设计自己的应用程序和探索最佳实践时仍需要完全靠自己。 本书则不同, 介绍了如何利用 python 有效的解决问题, 以及如何构建良好的 python 应用程序。

项目开始

1. python 项目结构

此处输入图片的描述

上图展示了一个项目的标准目录层次结构。

2. python 版本编号

PEP440 中规定了 python 的版本号应当遵照以下正则表达式:

 [N!]N(.N)*[{a|b|rc}N][.postN][.devN]

1.2a1 表示 alpha 版本,不是很稳定

2.3.1b2 一个beta版本,差不多了,有点Bug

3. 代码风格与编码规范

Python! 毫无疑问,PEP8, 参考地址 PEP 0008 – Style Guide for Python Code

还有个译文版! 真赞 !! 译 PEP 8 - Python 编码风格指南

阅读全文 »


Shell 交互工具 expect



执行该命令时,提示需要输入密码,谷歌了一下发现有expect这个工具,可以进行脚本自动交互,填入数据。直接贴个简单登录代码,后面部分可以忽略不看:

  
#!/usr/bin/expect  -f
spawn ssh root@$facecode.org
expect "password:"
send "xxoo\r"
interact

阅读全文 »


Python import探索



Java和Python玩家对import关键字一点都不陌生,本文以python为例,试着理解一下。

##1. 环境变量 可以猜到,在import模块时,python会从环境变量中搜索需要加载的模块,这个列表就存放在sys.path变量中,可以进行修改。想要引入时,首先要将路径放到环境变量中。 对环境变量临时修改,将/home/admin/git添加进来,示例如下:

>>> import sys
>>> '/home/admin/git' in sys.path
False
>>> sys.path.append('/home/admin/git')
>>> '/home/admin/git' in sys.path
True
>>> print sys.path
['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages', '/home/admin/git']

类似windows系统变量,在查询时,也是按照列表的顺序进行遍历

阅读全文 »


ChatProject3



This is the final version of the chat project, here we modified the chatclient.java using multithread. Chatlient.java

package Chat;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;

public class ChatClient extends Frame {
    Socket s = null;
    DataOutputStream dos = null;
    DataInputStream dis = null;
    private boolean bConnected = false;

    TextField tfTxt = new TextField();
    TextArea taContent = new TextArea();
    Thread tRecv = new Thread(new RecvThread());

    public static void main(String[] args) {
        new ChatClient().launchFrame();
    }

    public void launchFrame() {
        setLocation(400, 300);
        this.setSize(300, 300);
        add(tfTxt, BorderLayout.SOUTH);
        add(taContent, BorderLayout.NORTH);
        pack();
        this.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent arg0) {
                disconnect();
                System.exit(0);
            }

        });
        tfTxt.addActionListener(new TFListener());
        setVisible(true);
        connect();

        tRecv.start();
    }

    public void connect() {
        try {
            s = new Socket("127.0.0.1", 8888);
            dos = new DataOutputStream(s.getOutputStream());
            dis = new DataInputStream(s.getInputStream());
            System.out.println("connected!");
            bConnected = true;
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public void disconnect() {
        try {
            dos.close();
            dis.close();
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private class TFListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String str = tfTxt.getText().trim();
            // taContent.setText(str);
            tfTxt.setText("");

            try {
                // System.out.println(s);
                dos.writeUTF(str);
                dos.flush();
                // dos.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        }

    }

    private class RecvThread implements Runnable {

        @Override
        public void run() {
            try {
                while (bConnected) {
                    String str = dis.readUTF();
                    // System.out.println(str);
                    taContent.setText(taContent.getText() + str + '\n');
                }
            } catch (SocketException e) {
                System.out.println("退出了,bye!");
            } catch (EOFException e) {
                System.out.println("推出了,bye - bye!");
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }
}

阅读全文 »


ChatProject---2



###6. ChatClient send message to ChatServer.

In this version, we try to make the communications between chatclient and chatserver.

ChatClient

package Chat;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class ChatClient extends Frame {
    TextField tf = new TextField();
    TextArea ta = new TextArea();
    Socket s = null;

    public static void main(String[] args) {
        new ChatClient().launchFrame();
    }

    private void launchFrame() {
        this.setLocation(300, 500);
        this.setSize(300, 300);
        this.add(tf, BorderLayout.SOUTH);
        this.add(ta, BorderLayout.NORTH);
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
                ;
            }
        });
        tf.addActionListener(new TFListener());
        this.pack();
        this.setVisible(true);
        connect();
    }

    private void connect() {
        try {
            s = new Socket("127.0.0.1", 8888);
            System.out.println("Conencted to server!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private class TFListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            String str = tf.getText().trim();
            ta.setText(str);
            tf.setText("");
            // Send message
            try {
                DataOutputStream dos = new DataOutputStream(s.getOutputStream());
                dos.writeUTF(str);
                dos.flush();
                dos.close();
            } catch (IOException ee) {
                ee.printStackTrace();
            }
        }
    }
}

阅读全文 »