Python學習過程當中,常常發現教程上講的函數在本機上會報錯:node
AttributeError: 'module' object has no attribute '***'
做爲一個初學者,就會很懵逼的檢查: 一、有沒有寫錯函數名;二、是否是忘記引用這個函數了?三、檢查下這個插件模塊是否安裝了?...(若是你很認同,就說明你找對地方了)python
本篇文章將爲你們介紹學習Python過程當中windows環境的「坑」。windows
因爲和操做系統相關,因此這些「坑」來源於Python中的os模塊~~~socket
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() #新建進程 #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 --------------------
本文持續更新...
若是有錯誤、或建議,請務必聯繫我,我會在看到消息後的第一時間改進!!!orm