Hi Wang, You need to do what the shell does, all up the program directly, like this:
fork parent, in the parent, reap the child in the child, call exec() with the subprogram as the argument Here's an example: import os program_executable = "/bin/ls" parameters = ["/home/me/file1.txt", "/home/me/file2.txt"] pid = os.fork() if pid==0: #I'm the child os.execv(program_executable, program_executable + parameters) else: #I'm the parent os.waitpid(-1) #wait and reap a child process ---------- I have not been able to test it since I'm in Windows but this should do. This is basically just an implementation of what system() does... the waitpid() step is necessary in order not to leave a zombie process lying around. Hope it helps, Hugo Shuying Wang wrote: > Hi tutors, > > I've got an external program that I'm calling from python with > os.popen. The problem is that I need to pass this program an arbitrary > body of text. I've tried escaping characters before passing it as > input but the shell still expands out certain characters. I noticed > with python2.4. How do I bypass the shell and hand arguments directly > to the program? > > The problematic line in question looks like this: > os.popen('''rt create -t ticket set requestor='%s' owner='%s' > queue='%s' subject="%s" text="%s" status='%s' ''' % > (data['requestor'],data['owner'],data['queue'], > re.sub(r'\"',r'\\"',data['subject']), re.sub(r'\"',r'\\"', > data['body']), data['status']) > > thanks in advance, > Shuying > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor