Popen and Razor client

Donn Cave donn at u.washington.edu
Fri Aug 23 15:59:26 EDT 2002

Quoth Toorop <toorop at cyborgnation.org>:
| Bonjour ,
|   First escuse my english.....
(It is not perfect, I must say, but it has not kept you from
 delivering a very clear statement of your problem.)

|   Second : i want to make a razor client with python in order to add
|   this function to my mail scanner (which is in python too).
|   But i'm not ok with popen.
|   The normal use of razor is :
|   $ cat mail | razor-check
|   If the exit status of razor-check is 1, the mail is ok, if the exit
|   status is 0 the mail is considered has spam for razor.
|   In my script, the mail to test is in a string :test_spam.
|   My script :
| def is_spam_for_razor(test_spam) :
|     import popen2
|     razor_check="/usr/bin/razor-check"
|     in_razor,out_razor=popen2.popen2(razor_check)
|     reponse=out_razor.write(test_spam)
|     reponse2=in_razor.readline()
|     print reponse2
|     #close
|     in_razor.close()
|     out_razor.close()
|   But has you can expect, it doesn't work, the script wait, wait,wait...
|   If someone could help me.

I suggest you move the last line, out_razor.close(), to before the
in_razor.readline().  That will tell razor-check that there's no
more data, and it can finish up.

Then you will of course want to refine this program to determine
what its exit status was, 0 or not.  If you replace popen2.popen2(cmd)
with popen2.Popen3(cmd), you'll a class instance with fromchild and
tochild members and a wait() method;  os.WEXITSTATUS(xx.wait()) is
razor's exit status.

	Donn Cave, donn at u.washington.edu

More information about the Python-list mailing list