【Python學習】windows環境不能用的函數

1、Before

Python學習過程當中,常常發現教程上講的函數在本機上會報錯:node

AttributeError: 'module' object has no attribute '***'

做爲一個初學者,就會很懵逼的檢查: 一、有沒有寫錯函數名;二、是否是忘記引用這個函數了?三、檢查下這個插件模塊是否安裝了?...(若是你很認同,就說明你找對地方了)python

本篇文章將爲你們介紹學習Python過程當中windows環境的「坑」。windows

2、正文

因爲和操做系統相關,因此這些「坑」來源於Python中的os模塊~~~socket

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

二、os.fork()

os.fork()  #新建進程
  #output:pid

Unix/Linux操做系統提供了一個fork()系統調用,它很是特殊。普通的函數調用,調用一次,返回一次,可是fork()調用一次,返回兩次,由於操做系統自動把當前進程(稱爲父進程)複製了一份(稱爲子進程),而後,分別在父進程和子進程內返回。
子進程永遠返回0,而父進程返回子進程的ID。這樣作的理由是,一個父進程能夠fork出不少子進程,因此,父進程要記下每一個子進程的ID,而子進程只須要調用getppid()就能夠拿到父進程的ID。插件

解決方案:
一、使用Python的multiprocessing模塊的Process來建立進程code

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

3、After

本文持續更新...
若是有錯誤、或建議,請務必聯繫我,我會在看到消息後的第一時間改進!!!orm

相關文章
相關標籤/搜索