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

原创 2013年12月02日 14:40:27

一、对于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()

相关文章推荐

QTouch嵌入式跨平台组态软件

  • 2015年11月16日 16:11
  • 20.74MB
  • 下载

ECDS 嵌入式跨平台开发系统V1.0.pdf

  • 2008年09月29日 14:32
  • 335KB
  • 下载

嵌入式跨平台GUI选择

关注嵌入式gui库很久了,一直想找一个合适的gui库。Thomas Petazzoni的这篇文章不错choosing-embedded-graphical-libraries,感谢Thomas Pet...
  • educast
  • educast
  • 2012年10月10日 12:27
  • 1178

星云测试发布针对开放式Linux操作系统的嵌入式精准测试平台Shell

星云测试发布针对开放式Linux操作系统的嵌入式精准测试平台Shell  如今,嵌入式系统被广泛引用于国防、航天、金融、通信等重要领域,随着物联网、智能硬件、机器人以及智能移动设备在各行业、家庭的快速...

移植Python2.7到ARM-LINUX嵌入式平台

笔者长期在ARM-LINUX嵌入式平台使用C语言开发。硬件IO操作只能用C确实没办法,但是应用程序用C简直就苦了个逼了,程序复杂一点,各种越界、指针错误、诡异死机、segment fault、内存泄漏...

linux下node-webkit自动跨平台打包shell

前言 node-webkit可谓是webapp开发神器,支持windows、mac、linux,但是打包是个问题,总不能在三个系统里面打包吧。 官方也有打包工具,但是总觉得挺麻烦的。 于是想...

嵌入式 shell脚本赋值的5种方法

1. Shell中的变量类型 Shell中的变量可以分为环境变量、位置变量、预定义的特殊变量以及用户自定义变量、 2. 环境变量 Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:56
  • 520

Shell脚本实现动态配置IP与路由:解决嵌入式Android/Linux有线和无线网卡双网共存问题

Shell脚本实现动态配置IP与路由:解决嵌入式Android/Linux有线和无线网卡双网共存问题 网络环境及问题再现 命令行方式实现双网共存 Shell脚本自动实现双网共存(根据网络环境动态配置I...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 shell与python跨平台注意点
举报原因:
原因补充:

(最多只允许输入30个字)