Re: IPC::Open2 under mod_perl in Mac OS X
John Siracusa wrote: > On 6/30/02 2:06 AM, Stas Bekman wrote: > >>John Siracusa wrote: >> >>>(I'm not sure if this is a mod_perl thing of a Mac OS X bug, so I'm posting >>>it to both lists. Redirect follow-ups as appropriate.) >>> >>>open2() doesn't seem to work for me when running under mod_perl in Mac OS X. >> >>It's not a bug in MacOSX, it simply doesn't work with mod_perl. > > > I can't post a direct example now (because I don't have access to the > machine from here), but I'm pretty sure I do have an example of open2() > working under mod_perl in Linux--in a perl that is not compiled with sfio. > That's why I thought it was a Mac OS X bug. > > The mod_perl guide talks about the output from system(), exec(), and open(F, > "| ...") not being sent to the browser, but it doesn't mention open2(). In > the case of open2(), the input and output is supposed to be tied to > filehandles that I supply, not connected to mod_perl's (tied?) STDOUT that > eventually goes to the browser. > > So could you clarify why open2() is not expected to work under mod_perl, and > why it seems to work for me in Linux? (I'll post the working Linux example > once I can confirm it on Monday.) I should have said that your example doesn't work on linux with mod_perl with sfio-enabled perl, since I've tried it and it didn't work. That's why I've assumed that it's not MacOSX problem. I really didn't have a chance to investigate why it doesn't work. I've just tried other alternatives which worked so I've posted them, since I thought that it was important to you to have a working solution. Feel free to debug the whole thing and post the details of what exactly doesn't work and if possible how to fix that. __ Stas BekmanJAm_pH --> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: IPC::Open2 under mod_perl in Mac OS X
On 6/30/02 2:06 AM, Stas Bekman wrote: > John Siracusa wrote: >> (I'm not sure if this is a mod_perl thing of a Mac OS X bug, so I'm posting >> it to both lists. Redirect follow-ups as appropriate.) >> >> open2() doesn't seem to work for me when running under mod_perl in Mac OS X. > > It's not a bug in MacOSX, it simply doesn't work with mod_perl. I can't post a direct example now (because I don't have access to the machine from here), but I'm pretty sure I do have an example of open2() working under mod_perl in Linux--in a perl that is not compiled with sfio. That's why I thought it was a Mac OS X bug. The mod_perl guide talks about the output from system(), exec(), and open(F, "| ...") not being sent to the browser, but it doesn't mention open2(). In the case of open2(), the input and output is supposed to be tied to filehandles that I supply, not connected to mod_perl's (tied?) STDOUT that eventually goes to the browser. So could you clarify why open2() is not expected to work under mod_perl, and why it seems to work for me in Linux? (I'll post the working Linux example once I can confirm it on Monday.) -John
Re: IPC::Open2 under mod_perl in Mac OS X
John Siracusa wrote: > (I'm not sure if this is a mod_perl thing of a Mac OS X bug, so I'm posting > it to both lists. Redirect follow-ups as appropriate.) > > open2() doesn't seem to work for me when running under mod_perl in Mac OS X. It's not a bug in MacOSX, it simply doesn't work with mod_perl. the piped program ('upcase' in your example) never sees any input. There are at least two working alternatives: 1) use IPC::Run: #!/usr/bin/perl use strict; use CGI qw(:standard); use IPC::Run qw(start finish) ; local $ENV{PATH}; print header(); my @cmd = qw(/tmp/upcase) ; my $h = start \@cmd, 'pipe', \*OUT, '2>pipe', \*ERR or die "@cmd returned $?" ; print IN "Perl::Run and Barrie rule!"; close IN; print , ; finish $h ; the upcase program without any change: #!/usr/bin/perl $buf .= $_ while(); print uc $buf; 2) use Apache::SubProcess: use Apache::SubProcess (); my $r = shift; $r->send_http_header('text/plain'); use vars qw($input); $input = "Apache::SubProcess rules too!"; my($out, $in, $err) = $r->spawn_child(\&upcase); print $out $input; $r->send_fd($in); sub upcase { my $r = shift; $r->subprocess_env(CONTENT_LENGTH => length $input); $r->filename("/tmp/upcase"); $r->call_exec; } notice that the upcase script will be different from yours in this case, it looks like: #!/usr/bin/perl read STDIN, $buf, $ENV{CONTENT_LENGTH}; print uc $buf; As this module lacks any docs, you can find them here: http://perl.apache.org/release/docs/1.0/guide/modules.html#Apache__SubProcess __ Stas BekmanJAm_pH --> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com