pythonsignal
A. python 標准庫signal在哪個文件
系統互動,主要指Python和操作系統(operate system)、文件系統(file system)的互動。Python可以實現一個操作系統的許多功能。它能夠像bash腳本那樣管理操作系統,這也是Python有時被成為腳本語言的原因。
1. Python運行控制
sys包被用於管理Python自身的運行環境。Python是一個解釋器(interpreter), 也是一個運行在操作系統上的程序。我們可以用sys包來控制這一程序運行的許多參數,比如說Python運行所能占據的內存和CPU, Python所要掃描的路徑等。另一個重要功能是和Python自己的命令行互動,從命令行讀取命令和參數。
2. 操作系統
如果說Python構成了一個小的世界,那麼操作系統就是包圍這個小世界的大世界。Python與操作系統的互動可以讓Python在自己的小世界裡管理整個大世界。
os包是Python與操作系統的介面。我們可以用os包來實現操作系統的許多功能,比如管理系統進程,改變當前路徑(相當於』cd『),改變文件許可權等,建立。但要注意,os包是建立在操作系統的平台上的,許多功能在Windows系統上是無法實現的。另外,在使用os包中,要注意其中的有些功能已經被其他的包取代。
我們通過文件系統來管理磁碟上儲存的文件。查找、刪除,復制文件,以及列出文件列表等都是常見的文件操作。這些功能經常可以在操作系統中看到(比如ls, mv, cp等linux命令),但現在可以通過Python標准庫中的glob包、shutil包、os.path包、以及os包的一些函數等,在Python內部實現。
subprocess包被用於執行外部命令,其功能相當於我們在操作系統的命令行中輸入命令以執行,比如常見的系統命令'ls'或者'cd',還可以是任意可以在命令行中執行的程序。
B. python 怎麼啟動一個外部命令程序,並且不阻塞當前進程
在Python中,我們通過標准庫中的subprocess包來fork一個子進程,並運行一個外部的程序。
使用subprocess包中的函數創建子進程的時候,要注意:
1) 在創建子進程之後,父進程是否暫停,並等待子進程運行。
2) 函數返回什麼
3) 當returncode不為0時,父進程如何處理。
subprocess.call()
父進程等待子進程完成
返回退出信息
subprocess.check_call()
父進程等待子進程完成
返回0
檢查退出信息,如果returncode不為0,則舉出錯誤subprocess.CalledProcessError,該對象包含有returncode屬性,可用try...except...來檢查。
subprocess.check_output()
父進程等待子進程完成
返回子進程向標准輸出的輸出結果
檢查退出信息,如果returncode不為0,則舉出錯誤subprocess.CalledProcessError,該對象包含有returncode屬性和output屬性,output屬性為標准輸出的輸出結果,可用try...except...來檢查。
這三個函數的使用方法相類似,我們以subprocess.call()來說明:
importsubprocess
rc=subprocess.call(["ls","-l"])
實際上,我們上面的三個函數都是基於Popen()的封裝(wrapper)。這些封裝的目的在於讓我們容易使用子進程。當我們想要更個性化我們的需求的時候,就要轉向Popen類,該類生成的對象用來代表子進程。
與上面的封裝不同,Popen對象創建後,主程序不會自動等待子進程完成。我們必須調用對象的wait()方法,父進程才會等待 (也就是阻塞block):
importsubprocess
child=subprocess.Popen(["ping","-c","5","www.google.com"])
child.wait()
print("parentprocess")
此外,你還可以在父進程中對子進程進行其它操作,比如我們上面例子中的child對象:
child.poll() # 檢查子進程狀態
child.kill() # 終止子進程
child.send_signal()# 向子進程發送信號
child.terminate() # 終止子進程
因此,如果不希望當前進程被阻塞,你可以使用Popen對象進行操作。
C. ubuntu|linux下 如何用python 模擬按鍵
ubuntu下,也就是linux下,通常會用kill -事件編號實現。 你查一下LINUX下的事件就明白了。
kill 進程號 實現上是發了一個信號給指定的進程。 在python里,也可以載入事件處理模塊,處理來自其它程序發過來的信號, 當然你可以用KILL工具發信號過來。
ctrl+d也是一個信號,ctrl+c也是一個。具體信號編碼我不記得了。不過以前我做多進程管理時就是使用這個方法。 好象信號還可以帶參數過來。
你打開python的幫助。看看signal這個模塊。我把它的例子拿過來。對你有用不
importsignal,os
defhandler(signum,frame):
print'Signalhandlercalledwithsignal',signum
raiseIOError("Couldn'topendevice!")
#Setthesignalhandleranda5-secondalarm
signal.signal(signal.SIGALRM,handler)
signal.alarm(5)
#Thisopen()mayhangindefinitely
fd=os.open('/dev/ttyS0',os.O_RDWR)
signal.alarm(0)#Disablethealarm
下面是我找到的一些資料。也許有用。
信號的概念
信號(signal)--進程之間通訊的方式,是一種軟體中斷。一個進程一旦接收到信號就會打斷原來的程序執行流程來處理信號。
幾個常用信號:
SIGINT終止進程中斷進程(control+c)
SIGTERM終止進程軟體終止信號
SIGKILL終止進程殺死進程
SIGALRM鬧鍾信號
進程結束信號SIGTERM和SIGKILL的區別
SIGTERM比較友好,進程能捕捉這個信號,根據您的需要來關閉程序。在關閉程序之前,您可以結束打開的記錄文件和完成正在做的任務。在某些情況下,假如進程正在進行作業而且不能中斷,那麼進程可以忽略這個SIGTERM信號。
對於SIGKILL信號,進程是不能忽略的。這是一個「我不管您在做什麼,立刻停止」的信號。假如您發送SIGKILL信號給進程,Linux就將進程停止在那裡。
發送信號一般有兩種原因:
1(被動式)內核檢測到一個系統事件.例如子進程退出會像父進程發送SIGCHLD信號.鍵盤按下control+c會發送SIGINT信號
2(主動式)通過系統調用kill來向指定進程發送信號
linux操作系統提供的信號
[100003@oss235 myppt]$ kill -l
1) SIGHUP2) SIGINT3) SIGQUIT4) SIGILL
5) SIGTRAP6) SIGABRT7) SIGBUS8) SIGFPE
9) SIGKILL10) SIGUSR111) SIGSEGV12) SIGUSR2
13) SIGPIPE14) SIGALRM15) SIGTERM16) SIGSTKFLT
17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP
21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU
25) SIGXFSZ26) SIGVTALRM27) SIGPROF28) SIGWINCH
29) SIGIO30) SIGPWR31) SIGSYS34) SIGRTMIN
35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+338) SIGRTMIN+4
39) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+8
43) SIGRTMIN+944) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-758) SIGRTMAX-6
59) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-2
63) SIGRTMAX-164) SIGRTMAX
Python提供的信號
Python 2.4.3 (#1, Jun 11 2009, 14:09:58)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "right", "credits" or "license" for more information.
>>> import signal
>>> dir(signal)
['NSIG', 'SIGABRT', 'SIGALRM', 'SIGBUS', 'SIGCHLD', 'SIGCLD',
'SIGCONT', 'SIGFPE', 'SIGHUP', 'SIGILL', 'SIGINT', 'SIGIO', 'SIGIOT',
'SIGKILL', 'SIGPIPE', 'SIGPOLL', 'SIGPROF', 'SIGPWR', 'SIGQUIT',
'SIGRTMAX', 'SIGRTMIN', 'SIGSEGV', 'SIGSTOP', 'SIGSYS', 'SIGTERM',
'SIGTRAP', 'SIGTSTP', 'SIGTTIN', 'SIGTTOU', 'SIGURG', 'SIGUSR1',
'SIGUSR2', 'SIGVTALRM', 'SIGWINCH', 'SIGXCPU', 'SIGXFSZ', 'SIG_DFL',
'SIG_IGN', '__doc__', '__name__', 'alarm', 'default_int_handler',
'getsignal', 'pause', 'signal']
操作系統規定了進程收到信號以後的默認行為
但是,我們可以通過綁定信號處理函數來修改進程收到信號以後的行為
有兩個信號是不可更改的SIGTOP和SIGKILL
綁定信號處理函數
import os
import signal
from time import sleep
def onsignal_term(a,b):
print '收到SIGTERM信號'
#這里是綁定信號處理函數,將SIGTERM綁定在函數onsignal_term上面
signal.signal(signal.SIGTERM,onsignal_term)
def onsignal_usr1(a,b):
print '收到SIGUSR1信號'
#這里是綁定信號處理函數,將SIGUSR1綁定在函數onsignal_term上面
signal.signal(signal.SIGUSR1,onsignal_usr1)
while 1:
print '我的進程id是',os.getpid()
sleep(10)
運行該程序。然後通過另外一個進程來發送信號。
發送信號
發送信號的代碼如下:
import os
import signal
#發送信號,16175是前面那個綁定信號處理函數的pid,需要自行修改
os.kill(16175,signal.SIGTERM)
#發送信號,16175是前面那個綁定信號處理函數的pid,需要自行修改
os.kill(16175,signal.SIGUSR1)
D. 如何使用python處理心音信號
在了解了Linux的信號基礎之 後,Python標准庫中的signal包就很容易學習和理解。signal包負責在Python程序內部處理信號,典型的操作包括預設信號處理函數,暫 停並等待信號,以及定時發出SIGALRM等。要注意,signal包主要是針對UNIX平台(比如Linux, MAC OS),而Windows內核中由於對信號機制的支持不充分,所以在Windows上的Python不能發揮信號系統的功能。
信號(signal)-- 進程之間通訊的方式,是一種軟體中斷。一個進程一旦接收到信號就會打斷原來的程序執行流程來處理信號。
定義信號名
signal包定義了各個信號名及其對應的整數,比如:
import signal
print(signal.SIGABRT)
print(signal.SIG_DFL)
Python所用的信號名與Linux一致,可以通過$ man 7 signal 查詢
預設信號處理函數
signal包的核心是使用signal.signal()函數來預設(register)信號處理函數,如下所示:
singnal.signal(signalnum, handler)
signalnum為某個信號,handler為該信號的處理函數。我們在信號基礎里提到,進程可以無視信號,可以採取默認操作,還可以自定義操作。當handler為signal.SIG_IGN時,信號被無視(ignore)。當handler為singal.SIG_DFL,進程採取默認操作(default)。當handler為一個函數名時,進程採取函數中定義的操作。
import signal
# Define signal handler function
def myHandler(signum, frame):
print('I received: ', signum)
# register signal.SIGTSTP's handler
signal.signal(signal.SIGTSTP, myHandler)
signal.pause()
print('End of Signal Demo')
# 有問題待測試
在主程序中,我們首先使用signal.signal()函數來預設信號處理函數。然後我們執行signal.pause()來讓該進程暫停以等待信號, 以等待信號。當信號SIGUSR1被傳遞給該進程時,進程從暫停中恢復,並根據預設,執行SIGTSTP的信號處理函數myHandler()。 myHandler的兩個參數一個用來識別信號(signum),另一個用來獲得信號發生時,進程棧的狀況(stack frame)。這兩個參數都是由signal.singnal()函數來傳遞的。
上面的程序可以保存在一個文件中(比如test.py)。我們使用如下方法運行:
$python test.py
以便讓進程運行。當程序運行到signal.pause()的時候,進程暫停並等待信號。此時,通過按下CTRL+Z向該進程發送SIGTSTP信號。我們可以看到,進程執行了myHandle()函數, 隨後返回主程序,繼續執行。(當然,也可以用$ps查詢process ID, 再使用$kill來發出信號。)
(進程並不一定要使用signal.pause()暫停以等待信號,它也可以在進行工作中接受信號,比如將上面的signal.pause()改為一個需要長時間工作的循環。)
我們可以根據自己的需要更改myHandler()中的操作,以針對不同的信號實現個性化的處理。
定時發出SIGALRM信號
一個有用的函數是signal.alarm(),它被用於在一定時間之後,向進程自身發送SIGALRM信號:
import signal
# Define signal handler function
def myHandler(signum, frame):
print("Now, it's the time")
exit()
# register signal.SIGALRM's handler
signal.signal(signal.SIGALRM, myHandler)
signal.alarm(5)
while True:
print('not yet')
我們這里用了一個無限循環以便讓進程持續運行。在signal.alarm()執行5秒之後,進程將向自己發出SIGALRM信號,隨後,信號處理函數myHandler開始執行。
發送信號
signal包的核心是設置信號處理函數。除了signal.alarm()向自身發送信號之外,並沒有其他發送信號的功能。但在os包中,有類似於linux的kill命令的函數,分別為
os.kill(pid, sid)
os.killpg(pgid, sid)
分別向進程和進程組(見Linux進程關系)發送信號。sid為信號所對應的整數或者singal.SIG*。
實際上signal, pause,kill和alarm都是Linux應用編程中常見的C庫函數,在這里,我們只不過是用Python語言來實現了一下。實際上,Python 的解釋器是使用C語言來編寫的,所以有此相似性也並不意外。此外,在Python 3.4中,signal包被增強,信號阻塞等功能被加入到該包中。我們暫時不深入到該包中。
總結
signal.SIG*
signal.signal()
signal.pause()
signal.alarm()
E. python 怎麼查看signal
信號(signal)--進程之間通訊的方式,是一種軟體中斷。一個進程一旦接受到信號就會打斷原來的程序執行流程來處理信號。
幾個常用信號:
SIGINT 終止進程 中斷進程 (control+c)
SIGTERM 終止進程 軟體終止信號
SIGKILL 終止進程 殺死進程
SIGALRM 鬧鍾信號
進程結束信號 SIGTERM和SIGKILL的區別
SIGTERM比較友好,進程能捕捉這個信號,根據您的需要來關閉程序。在關閉程序之前,您可以結束打開的記錄文件和完成正在做的任務。在某些情況下,假如進程正在進行作業而且不能中斷,那麼進程可以忽略這個SIGTERM信號。
對於SIGKILL信號,進程是不能忽略的。這是一個 「我不管您在做什麼,立刻停止」的信號。假如您發送SIGKILL信號給進程,Linux就將進程停止在那裡。
發送信號一般有兩種原因:
1(被動式) 內核檢測到一個系統事件.例如子進程退出會像父進程發送SIGCHLD信號.鍵盤按下control+c會發送SIGINT信號
2(主動式) 通過系統調用kill來向指定進程發送信號
補充:
POSIX.1中列出的信號:
信號 值 處理動作 發出信號的原因
----------------------------------------------------------------------
SIGHUP 1 A 終端掛起或者控制進程終止
SIGINT 2 A 鍵盤中斷(如break鍵被按下)
SIGQUIT 3 C 鍵盤的退出鍵被按下
SIGILL 4 C 非法指令
SIGABRT 6 C 由abort(3)發出的退出指令
SIGFPE 8 C 浮點異常
SIGKILL 9 AEF Kill信號
SIGSEGV 11 C 無效的內存引用
SIGPIPE 13 A 管道破裂: 寫一個沒有讀埠的管道
SIGALRM 14 A 由alarm(2)發出的信號
SIGTERM 15 A 終止信號
SIGUSR1 30,10,16 A 用戶自定義信號1
SIGUSR2 31,12,17 A 用戶自定義信號2
SIGCHLD 20,17,18 B 子進程結束信號
SIGCONT 19,18,25 進程繼續(曾被停止的進程)
SIGSTOP 17,19,23 DEF 終止進程
SIGTSTP 18,20,24 D 控制終端(tty)上按下停止鍵
SIGTTIN 21,21,26 D 後台進程企圖從控制終端讀
SIGTTOU 22,22,27 D 後台進程企圖從控制終端寫
處理動作一項中的字母含義如下:
A 預設的動作是終止進程
B 預設的動作是忽略此信號
C 預設的動作是終止進程並進行內核映像轉儲(mp core)
D 預設的動作是停止進程
E 信號不能被捕獲
F 信號不能被忽略
鍵盤和shell的交互:
Ctrl-c Kill foreground process 常用 ;送SIGINT信號,默認進程會結束,但是進程自己可以重定義收到這個信號的行為。
Ctrl-z Suspend foreground process;送SIGSTOP信號,進程只是被停止,再送SIGCONT信號,進程繼續運行。
Ctrl-d Terminate input, or exit shell 常用 有時也會使程序退出,例如沒有參數的cat命令,從終端讀一行顯示一行,知道Ctrl+D終結輸入並終結進程;不是發送信號,而是表示一個特殊的二進制值,表示 EOF。
Ctrl-s Suspend output
Ctrl-q Resume output
Ctrl-o Discard output
Ctrl-l Clear screen
控制字元都是可以用(stty命令)更改的。可以用stty -a看看終端配置。
有些信號不能被屏蔽,比如中斷,還應該有殺死進程的信號,要不然內核怎麼做操作系統中的老大。實際上,SIGKILL和SIGSTOP信號是不能被屏蔽或阻止的,他們的默認動作總是會被執行的
F. Python 最重要的庫都有哪些
第一、NumPy
NumPy是Numerical
Python的簡寫,是Python數值計算的基石。它提供多種數據結構、演算法以及大部分涉及Python數值計算所需的介面。NumPy還包括其他內容:
①快速、高效的多維數組對象ndarray
②基於元素的數組計算或數組間數學操作函數
③用於讀寫硬碟中基於數組的數據集的工具
④線性代數操作、傅里葉變換以及隨機數生成
除了NumPy賦予Python的快速數組處理能力之外,NumPy的另一個主要用途是在演算法和庫之間作為數據傳遞的數據容器。對於數值數據,NumPy數組能夠比Python內建數據結構更為高效地存儲和操作數據。
第二、pandas
pandas提供了高級數據結構和函數,這些數據結構和函數的設計使得利用結構化、表格化數據的工作快速、簡單、有表現力。它出現於2010年,幫助Python成為強大、高效的數據分析環境。常用的pandas對象是DataFrame,它是用於實現表格化、面向列、使用行列標簽的數據結構;以及Series,一種一維標簽數組對象。
pandas將表格和關系型資料庫的靈活數據操作能力與Numpy的高性能數組計算的理念相結合。它提供復雜的索引函數,使得數據的重組、切塊、切片、聚合、子集選擇更為簡單。由於數據操作、預處理、清洗在數據分析中是重要的技能,pandas將是重要主題。
第三、matplotlib
matplotlib是最流行的用於制圖及其他二維數據可視化的Python庫,它由John D.
Hunter創建,目前由一個大型開發者團隊維護。matplotlib被設計為適合出版的制圖工具。
對於Python編程者來說也有其他可視化庫,但matplotlib依然使用最為廣泛,並且與生態系統的其他庫良好整合。
第四、IPython
IPython項目開始於2001年,由Fernando
Pérez發起,旨在開發一個更具交互性的Python解釋器。在過去的16年中,它成為Python數據技術棧中最重要的工具之一。
盡管它本身並不提供任何計算或數據分析工具,它的設計側重於在交互計算和軟體開發兩方面將生產力最大化。它使用了一種執行-探索工作流來替代其他語言中典型的編輯-編譯-運行工作流。它還提供了針對操作系統命令行和文件系統的易用介面。由於數據分析編碼工作包含大量的探索、試驗、試錯和遍歷,IPython可以使你更快速地完成工作。
第五、SciPy
SciPy是科學計算領域針對不同標准問題域的包集合。以下是SciPy中包含的一些包:
①scipy.integrate數值積分常式和微分方程求解器
②scipy.linalg線性代數常式和基於numpy.linalg的矩陣分解
③scipy.optimize函數優化器和求根演算法
④scipy.signal信號處理工具
⑤scipy.sparse稀疏矩陣與稀疏線性系統求解器
SciPy與Numpy一起為很多傳統科學計算應用提供了一個合理、完整、成熟的計算基礎。
第六、scikit-learn
scikit-learn項目誕生於2010年,目前已成為Python編程者首選的機器學習工具包。僅僅七年,scikit-learn就擁有了全世界1500位代碼貢獻者。其中包含以下子模塊:
①分類:SVM、最近鄰、隨機森林、邏輯回歸等
②回歸:Lasso、嶺回歸等
③聚類:K-means、譜聚類等
④降維:PCA、特徵選擇、矩陣分解等
⑤模型選擇:網格搜索、交叉驗證、指標矩陣
⑥預處理:特徵提取、正態化
scikit-learn與pandas、statsmodels、IPython一起使Python成為高效的數據科學編程語言。
G. python里的問題 ,pywt.dwt(signal,'db1','sym')這個函數
雜訊能獲取嗎?好吧。你可以試試減一減。不過你的測試用例不太對。 盡量用有規律的數據去做。
比如你可以做一個正弦函數,再人為的加上一點點擾動。再做小波變換看看。另外數據要多些。太短的數據看不出效果來。
至於變換後是兩個4,我想等你數據弄多些就明白了。 數據多些,就容易做圖。你把變換後的數據變成圖形,畫出來。可以用EXCEL來畫。
這樣一對比就明白變換後的兩個4數組是什麼數據。 然後你就可以針對性的處理。取得雜訊也是可以的。
通常來講雜訊是沒有規律的。 但是不排除它是另外一種規律迭加上去的。 試試看。
H. qtablewidget 的signal怎麼用python
安裝完anaconda,修改~/.bash_profile文件(這是針對當前登錄用戶的),添加anaconda的bin目錄到PATH中,然後重開一個terminal終端,你會發現,Centos自帶的python2和python3是共存的,執行命令python/python2可以啟動python2,執行python3/python3.5會啟動python3.5。
I. python 中signal函數的運用
完全可以工作嘛,只是不知道你的其他代碼是怎麼樣的,下面是我的測試代碼:
import signal
global count
count = 0
def myhandle(n=0,e=0):
global count
count += 1
print 'in myhanle', count
if __name__ == '__main__':
signal.signal(signal.SIGINT, myhandle)
while count < 5: #按5次ctrl+c後退出
signal.pause() #此語句是暫停程序,接收信號;如果你有其他代碼運行也是一樣,只要在按ctrl+c之前別退出程序就行了
J. 什麼是維納濾波,對於python里的函數scipy.signal.wiener(im,mysize
文檔很細致啊。
im : ndarray
An N-dimensional array.
mysize : int or arraylike, optional
A scalar or an N-length list giving the size of the Wiener filter window in each dimension. Elements of mysize should be odd. If mysize is a scalar, then this scalar is used as the size in each dimension.
noise : float, optional
The noise-power to use. If None, then noise is estimated as the average of the local variance of the input.