有没有办法在发生事情时发送信号,接收信号并做其他事情?

时间:2012-11-13 15:59:11

标签: python signals

我可以使用.txt文件来执行此操作,当发生某些事情时,它会写入“ok”,而另一个程序会读取它并在.txt文件中包含“ok”时执行某些操作。但是,我想知道我是否可以采用其他方式。

2 个答案:

答案 0 :(得分: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)

发件人打开阻塞管道,因此如果接收器关闭管道,通常在终止时会出现异常。阅读器打开一个非阻塞管道,以便在等待发件人写入的任何内容时不会挂起。当发送方或接收方关闭一个管道端时,阻塞/非阻塞的组合产生不同的响应。如果有任何管道溢出的可能性(写入kbytes,没有读取),您可能希望打开写入结束非阻塞。

答案 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)

python打开文件后,只需正常输入该函数即可。这应该有用。