2012-11-13 65 views
0

我可以用.txt文件來做到這一點,當發生什麼事情時它會寫「ok」,而其他程序會讀取它,如果.txt文件裏面有「ok」,則會執行某些操作。但是,我想知道如果我能用另一種方式做。有沒有辦法在發生事件時發送信號,並接收信號並執行其他操作?

+7

這是有點寬泛 - 你可以進入更多的細節?你是否試圖在兩個Python程序之間進行通信,或者是一個Python程序和另一種語言編寫的程序,或者一個Python程序和一個你無法控制的程序,這些程序會以某種方式期待事情? –

+0

超過兩個python程序在同一時間工作... – Antoni4040

+0

什麼樣的「信號」? – martineau

回答

1

您可以使用信號,例如, USR1,但我認爲你不能在Python中提高信號。 現在您可以使用命名管道代替通過文件進行通信。命名管道將提供一些額外的功能,請參見最後一段。

您打開管道作爲普通文件,然後按照現在的方式進行寫入和讀取。你通過mkfifo filename創建管道,也可以在你的python程序中創建。爲演示兩個示例程序:

發件人:

fdw= os.open("./mypipe", os.O_WRONLY) 
while (1): 
try: 
    os.write(fdw, "OK\n") 
except OSError, e: 
    if e.errno==errno.EPIPE: 
     #Receiver closed the pipe             
     print "Reader closed pipe\n" 
     sys.exit(0) 
    else: 
     #some other os problem               
     print os.strerror(e.errno) 
    time.sleep(3) 

接收機:

fdr= os.open("./mypipe", os.O_RDONLY | os.O_NONBLOCK) 
while (1): 
    try: 
    s= os.read(fdr, 10) 
    print s 
    except OSError, e: 
    if e.errno==errno.EBUSY: 
     print "nothing to read yet\n" 
    else: 
     print os.strerror(e.errno) 
    time.sleep(1) 

發件人打開阻塞管道,所以你會得到一個異常,如果接收器關閉管道,通常當終止。閱讀器打開一個非阻塞管道,以便在等待發件人寫入的任何內容時不會掛起。當發送方或接收方關閉一個管道端時,阻塞/非阻塞組合會產生不同的響應。如果存在管道溢出的可能性(寫入千字節,沒有任何讀取),您可能想要打開寫入結束非阻塞。

-4

看來你想使用一個函數。 我假設你在這樣做各種測試的線路做一些事情,如果這是真的,每個人做不同的東西......

def function(parameters): 

的參數是在函數中使用的對象:

def fib(a, b, c): 
    x=a*b*c*10 
    print x 

這只是一個簡單的功能,但你可以做很複雜的事情。

我把這個網頁轉交給TutorialsPoint:Python Functions

如果您在另一個程序的功能,也許打開文件:

open(file_name) 
function(parameters) 

蟒蛇後打開該文件,只需輸入功能正常。這應該工作。

+0

我知道如何創建一個函數,我只希望它在另一個Python程序到達時執行... – Antoni4040

+0

TutorialsPoint的特殊-1。它充滿了錯誤。躲開它。 –

相關問題