关闭

嵌入式 shell与python跨平台注意点

624人阅读 评论(0) 收藏 举报
分类:

一、对于shell

首行

#!/usr/bin/env bash

#encoding =utf-8 

 

 

二、对于python

 

1. 编码。python文件头一定要

#!/usr/bin/env python
#coding=GBK

是GBK就要申明,否则 IDLE,PythonWin,uLiPad,notepad,gedit一会儿就弄成乱码了

2. 换行。为了保持最大的兼容性,推荐用 0x0A,也就是 /n。

3.缩进。也就是按tab键。这个东西出了问题是最郁闷的。多一个,少一个都要报错。如果你的脚本连print "Hello, World" 都要报错的话,十有八九都是缩进问题。

很多时候我们需要编写能够同时在windows,linux两个平台运行的程序,这个时候使用python是一个不错的选择,下面说下我碰到的需要注意的几点。

1:分辨当前系统

import platform
if 'Windows' == platform.system():
   print'这是windows!'         
elif 'Linux' == platform.system():
   print'这是Linux!'     

2:编码问题

    windows下需要使用unicode编码,linux下一般使用utf-8编码。代码开发我使用了utf-8编码,当在windows下print中文的时候会出现乱码。解决方法如下:

import locale

'测试一下'.decode('UTF8').encode(locale.getdefaultlocale()[1])

 

3:写文件时换行符问题

   windows下换行符为\r\n,linux下为\n。这里在write文件时要注意兼容。

   只要注意打开文本时不要使用'b'参数:open(file,'a+') open(file, 'w')都可

 

4:文件路径处理

    请一定要使用os.path方法进行路径的处理,这样可以完全兼容系统不同。如以下方法:

path.join(), path.split(), path.splitext()等方法

 

5:编译为可执行文件

推荐两个软件py2exe(只能编译windows程序),pyinstaller(可以编译windows和linux二进制可执行程序)

两个程序都很方便使用,基本能满足编译需求。我更推荐pyinstaller,它不是python的模块,是外部的单独应用。

简单介绍使用方法如下:

py2exe:

   编写setup.py:

from distutils.core import setup
import py2exe

setup(console=["lz.py"]

   执行 :python setup.py py2exe

   在dist目录下找exe就可以了

pyinstaller:

     下载后,先执行Configure.py编译下环境

     运行Makespec.py -c xx.py  会生成一个spec文件

     运行Build.py xx.spec 生成二进制程序

众所周知,Windows下的路径分隔符为反斜杠 "\", 而UNIX-like系统下的路径分隔符为正斜杠 "/",这常导致代码跨平台移植时的问题。

Python设计为一门跨平台的语言,当然可以轻松解决此问题。

   

首先,Python在不同平台下都可以正确识别以正斜杠为分隔符的路径。如果在程序中只用到程序中预置的路径字符串(比如说指定库的位置),而不涉及从系统获取文件路径,则只要将路径写为正斜杠分隔路径,代码即可跨平台。

   

但是如果需要使用os.path.abspath() os.walk()等函数获取路径,Python返回的路径字符串会是操作系统默认格式的路径字符串。这时的解决方法主要有:

在需要拼接、查找路径分隔符的地方,使用 os.path.sep来代替显式的 '/' 或 '\\' ,该变量依平台不同而不同。

当然这样写会比较啰嗦,本来只需要 a+'/'+b+'/'+c就可以的地方,现在就需要写成a+os.path.sep+b+os.path.sep+c了。本来直接 filename.split('/')就可以,现在就得写成filename.split(os.path.sep)。

所以,对于这些操作,使用 os.path 的各种内置函数来操作,会简洁一些,同时也增加代码的可阅读性。比如说,前面的a+'/'+b+'/'+c 就可以写成os.path.join(a,b,c) 。类似的操作还有:os.path.split()

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:979707次
    • 积分:17634
    • 等级:
    • 排名:第540名
    • 原创:741篇
    • 转载:522篇
    • 译文:0篇
    • 评论:105条
    最新评论