469,609 Members | 1,657 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,609 developers. It's quick & easy.

Calling cgi from cgi thru 'system' function. Different behaviour on browser v/s cmd line

Hi

Im having trouble with the following code that seems to be behave
differently when called from the browser as opposed to the command
line. The calling script is a cgi that forks, with the child trying to
call another cgi script and pass arguments to it. It works fine from
the command line, and calls the required script and passes the
arguments correctly. However, when it is run on the browser, it calls
the script but does not pass the arguments to it.
The called script (included) is also a cgi, set up to accept
parameters via the param function. It accepts the parameters when the
calling script is run on the command line, but not when the calling
script is run on the browser.

I have also tried putting a '?' between the script name and the
arguments to get the "script.cgi?argument=1" format, and that didnt
work either.

Im not sure if the problem is in the system call, the use of CGI in
the called script, or somewhere else entirely. Any suggestions would
be extremely helpful...

Thanks in advance
Shailan

#### Calling script

if (my $pid = fork){
while (waitpid(-1,&WNOHANG) != $pid){
print ".";
sleep 2;
}

print qq{
</body>
</html>
};

exit;
}
else {
die "Cannot fork: $!\n" unless defined $pid;

#### Call the actual processing script.

print "Executing $program $args\n";
! system("perl", "$program", $args) or die "Call failed: $!";
#print $output;

exit;
}

#### End Calling script
#### Called script

#!/usr/local/bin/perl

use CGI;
use strict;

my $query = new CGI;
my $sleep_time = $query->param("sleep");
my @params = $query->param;

print "Content-type: text/html\n\n";
print qq{
<html>
<head><title>INF</title>
</head>
<body>
@params
};

for (my $i = 0; $i < 10; $i++){
print "Working\n";
sleep $sleep_time;
}
print qq{
Sleep time was $sleep_time<br>
Finished
</body>
</html>
};

exit;
#### End Called script
Jul 19 '05 #1
2 4529
The problem is the called CGI program is no longer a "CGI". It is just a
regular program. You should look for the parameters from the command line,
instead of using $query->param, which fetches the param from env var
QUERY_STRING, of course it is empty in this case.

So try to get the param from command line, like regular program in you
called "CGI" program like this,

$ARGV[0] $ARGV[1] ....

You will be doing fine

"Shailan" <sh*****@ureach.com> wrote in message
news:f8**************************@posting.google.c om...
Hi

Im having trouble with the following code that seems to be behave
differently when called from the browser as opposed to the command
line. The calling script is a cgi that forks, with the child trying to
call another cgi script and pass arguments to it. It works fine from
the command line, and calls the required script and passes the
arguments correctly. However, when it is run on the browser, it calls
the script but does not pass the arguments to it.
The called script (included) is also a cgi, set up to accept
parameters via the param function. It accepts the parameters when the
calling script is run on the command line, but not when the calling
script is run on the browser.

I have also tried putting a '?' between the script name and the
arguments to get the "script.cgi?argument=1" format, and that didnt
work either.

Im not sure if the problem is in the system call, the use of CGI in
the called script, or somewhere else entirely. Any suggestions would
be extremely helpful...

Thanks in advance
Shailan

#### Calling script

if (my $pid = fork){
while (waitpid(-1,&WNOHANG) != $pid){
print ".";
sleep 2;
}

print qq{
</body>
</html>
};

exit;
}
else {
die "Cannot fork: $!\n" unless defined $pid;

#### Call the actual processing script.

print "Executing $program $args\n";
! system("perl", "$program", $args) or die "Call failed: $!";
#print $output;

exit;
}

#### End Calling script
#### Called script

#!/usr/local/bin/perl

use CGI;
use strict;

my $query = new CGI;
my $sleep_time = $query->param("sleep");
my @params = $query->param;

print "Content-type: text/html\n\n";
print qq{
<html>
<head><title>INF</title>
</head>
<body>
@params
};

for (my $i = 0; $i < 10; $i++){
print "Working\n";
sleep $sleep_time;
}
print qq{
Sleep time was $sleep_time<br>
Finished
</body>
</html>
};

exit;
#### End Called script

Jul 19 '05 #2
Thanks Alex...that clears it up.

"Alex Zeng" <al*******@digi-go.com> wrote in message news:<eN********************@comcast.com>...
The problem is the called CGI program is no longer a "CGI". It is just a
regular program. You should look for the parameters from the command line,
instead of using $query->param, which fetches the param from env var
QUERY_STRING, of course it is empty in this case.

So try to get the param from command line, like regular program in you
called "CGI" program like this,

$ARGV[0] $ARGV[1] ....

You will be doing fine

"Shailan" <sh*****@ureach.com> wrote in message
news:f8**************************@posting.google.c om...
Hi

Im having trouble with the following code that seems to be behave
differently when called from the browser as opposed to the command
line. The calling script is a cgi that forks, with the child trying to
call another cgi script and pass arguments to it. It works fine from
the command line, and calls the required script and passes the
arguments correctly. However, when it is run on the browser, it calls
the script but does not pass the arguments to it.
The called script (included) is also a cgi, set up to accept
parameters via the param function. It accepts the parameters when the
calling script is run on the command line, but not when the calling
script is run on the browser.

I have also tried putting a '?' between the script name and the
arguments to get the "script.cgi?argument=1" format, and that didnt
work either.

Im not sure if the problem is in the system call, the use of CGI in
the called script, or somewhere else entirely. Any suggestions would
be extremely helpful...

Thanks in advance
Shailan

#### Calling script

if (my $pid = fork){
while (waitpid(-1,&WNOHANG) != $pid){
print ".";
sleep 2;
}

print qq{
</body>
</html>
};

exit;
}
else {
die "Cannot fork: $!\n" unless defined $pid;

#### Call the actual processing script.

print "Executing $program $args\n";
! system("perl", "$program", $args) or die "Call failed: $!";
#print $output;

exit;
}

#### End Calling script
#### Called script

#!/usr/local/bin/perl

use CGI;
use strict;

my $query = new CGI;
my $sleep_time = $query->param("sleep");
my @params = $query->param;

print "Content-type: text/html\n\n";
print qq{
<html>
<head><title>INF</title>
</head>
<body>
@params
};

for (my $i = 0; $i < 10; $i++){
print "Working\n";
sleep $sleep_time;
}
print qq{
Sleep time was $sleep_time<br>
Finished
</body>
</html>
};

exit;
#### End Called script

Jul 19 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

6 posts views Thread by Pjotr Wedersteers | last post: by
5 posts views Thread by sugaray | last post: by
2 posts views Thread by | last post: by
reply views Thread by Cleo | last post: by
53 posts views Thread by souporpower | last post: by
reply views Thread by Solution2021 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.