一、Before
Python学习过程中,经常发现教程上讲的函数在本机上会报错:
AttributeError: 'module' object has no attribute '***'
作为一个初学者,就会很懵逼的检查: 1、有没有写错函数名;2、是不是忘记引用这个函数了?3、检查下这个插件模块是否安装了?...(如果你很认同,就说明你找对地方了)
本篇文章将为大家介绍学习Python过程中windows环境的“坑”。
二、正文
由于和操作系统相关,所以这些“坑”来源于Python中的os模块~~~
1、os.uname()
python提供了查看当前操作系统的函数:
os.name()
#output:
#nt--Windows系统
#posix--Linux、Unix或Mac OS X
python还提供了一个查看操作系统详细信息的函数,就是os.uname(),在mac环境下执行输出如下结果。
os.uname()
#output:(sysname, nodename, release, version, machine)
#('Darwin', 'iMac.local', '13.3.0', 'Darwin Kernel Version 13.3.0: Tue Jun 3 21:27:35 PDT 2014; root:xnu-2422.110.17~1/RELEASE_X86_64', 'x86_64')
但是在windows上,就会报错没有这个模块。
解决方案:
(1)获取hostname:socket.gethostname() 或 socket.gethostbyaddr(socket.gethostname())
(2)使用platform.uname()
import platform
print platform.uname()
#output:
#(system='Windows', node='hongjie-PC',release='7', version='6.1.7601', machine='x86', processor='x86 Family 16 Model 6 Stepping 3, AuthenticAMD')
2、os.fork()
os.fork() #新建进程
#output:pid
Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。
子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程的ID。
解决方案:
1、使用Python的multiprocessing模块的Process来创建进程
import multiprocessing
import os
def runChildProcess(name):
print "Run Child Process,pname = {} , pid = {}".format(name,os.getpid())
if __name__ == '__main__':
print "Run Parent Process,pid = {}".format(os.getpid())
child = multiprocessing.Process(target=runChildProcess,args=('test',))
print "+"*20
child.start()
child.join()
print "-"*20
执行结果:
Run Parent Process,pid = 5540
++++++++++++++++++++
Run Child Process,pname = test , pid = 712
--------------------
三、After
本文持续更新...
如果有错误、或建议,请务必联系我,我会在看到消息后的第一时间改进!!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。