【Python学习】windows环境不能用的函数

一、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

本文持续更新…
如果有错误、或建议,请务必联系我,我会在看到消息后的第一时间改进!!!

    原文作者:ChristmasBoy
    原文地址: https://segmentfault.com/a/1190000010523894
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞