/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Problemer med perl
Fra : Michael Knudsen


Dato : 10-10-04 20:28

Hej.

Jeg kunne, som det fremgår af en tidligere tråd, godt tænke mig at
afvikle java-programmer på min server. Jeg har prøvet med følgende:

Først har jeg lavet et simpelt java-program:

public class Test
{
public static void main (String args[])
{
   System.out.println("Test!");
}
}

og dernæst har jeg lavet en cgi-fil:

#!/usr/bin/perl
print "Content-type: text/plain\n\n";
$a = "java Test";
$b = system ($a);
print $b;

Begge filer ligger placeret i /var/www/cgi-bin/.

Når jeg kører "perl test.cgi", får jeg:

[root@localhost cgi-bin]# perl test.cgi
Content-type: text/plain

Test!

men når jeg indlæser siden (test.cgi) i min browser, skriver den blot
-1. Hvad mon der går galt?

--
Michael Knudsen

 
 
Kristian Thy (10-10-2004)
Kommentar
Fra : Kristian Thy


Dato : 10-10-04 20:38

Michael Knudsen uttered:
> Når jeg kører "perl test.cgi", får jeg:
>
> [root@localhost cgi-bin]# perl test.cgi
> Content-type: text/plain
>
> Test!
>
> men når jeg indlæser siden (test.cgi) i min browser, skriver den blot
> -1. Hvad mon der går galt?

Dit perl-script skriver til stdout, og returnerer værdien -1 til din
browser. Du skal have fat i det der i perl svarer til php's passthru(),
men da jeg ikke kender noget til perl kan jeg desværre ikke være
behjælpelig der ;)

\\kristian
--
<URL:http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt>
<URL:http://home.att.net/~jbcole/humor/Microsoft_patents.htm>

Michael Knudsen (10-10-2004)
Kommentar
Fra : Michael Knudsen


Dato : 10-10-04 21:00

Kristian Thy wrote:

> Dit perl-script skriver til stdout, og returnerer værdien -1 til din
> browser. Du skal have fat i det der i perl svarer til php's passthru(),
> men da jeg ikke kender noget til perl kan jeg desværre ikke være
> behjælpelig der ;)

Det undrer mig bare, at den ene print-linje når frem til browseren, mens
den anden ikke gør.

--
Michael Knudsen

Klaus Ellegaard (10-10-2004)
Kommentar
Fra : Klaus Ellegaard


Dato : 10-10-04 20:59

Michael Knudsen <knudsen@imf.au.dk> writes:
>Det undrer mig bare, at den ene print-linje når frem til browseren, mens
>den anden ikke gør.

J2SE ("almindelig java") kræver sædvanligvis adgang til en grafisk
terminal for at fungere. Det har du næppe konfigureret for dit
CGI-script?

Mvh.
   Klaus.

Michael Knudsen (10-10-2004)
Kommentar
Fra : Michael Knudsen


Dato : 10-10-04 21:04

Klaus Ellegaard wrote:

> J2SE ("almindelig java") kræver sædvanligvis adgang til en grafisk
> terminal for at fungere. Det har du næppe konfigureret for dit
> CGI-script?

Nej, desværre. Gad vide, om jeg kan stille noget op?

--
Michael Knudsen

Klaus Ellegaard (10-10-2004)
Kommentar
Fra : Klaus Ellegaard


Dato : 10-10-04 21:08

Michael Knudsen <knudsen@imf.au.dk> writes:
>> J2SE ("almindelig java") kræver sædvanligvis adgang til en grafisk
>> terminal for at fungere. Det har du næppe konfigureret for dit
>> CGI-script?
>
>Nej, desværre. Gad vide, om jeg kan stille noget op?

Den rigtige løsning er jo at bruge J2EE. Det er designet til
at køre i web-miljøer. Til gengæld er det også ret bøvlet at
kode småting til - og ret system-krævende. Især hvis man bare
skal lege.

Hvis vi snakker et legesystem, kan du altid tillade, at det
pågældende script får adgang til en X-server. Du kan starte
programmet med "DISPLAY=10.20.30.40:0 java blahblah", hvor
IP-adressen er din arbejdsstation (forudsat at der ikke er
nogen firewalls eller lignende i vejen).

Det vil som regel også kræve, at du fra din arbejdsstation
tillader webserverens IP at snakke X: "xhost +10.20.30.50".

Det er sikkerhedsmæssigt ret skidt, for det tillader jo alle
på din webserver at åbne vinduer på din desktop. Bliver web-
serveren hacket, kunne der ske "spændende" ting. Men igen:
til leg er det sikkert fint nok. Især hvis det er én og samme
maskine.

Mvh.
   Klaus.

Jacob Bunk Nielsen (11-10-2004)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 11-10-04 09:56

Michael Knudsen <knudsen@imf.au.dk> writes:
> Klaus Ellegaard wrote:
>
>> J2SE ("almindelig java") kræver sædvanligvis adgang til en grafisk
>> terminal for at fungere. Det har du næppe konfigureret for dit
>> CGI-script?
>
> Nej, desværre. Gad vide, om jeg kan stille noget op?

Hvis du bruger Java 1.4.2 (eller nyere) kan du bruge headless support.
Se
<http://java.sun.com/j2se/1.4.2/docs/guide/awt/AWTChanges.html#headless>.

--
Jacob - www.bunk.cc
If you can't understand it, it is intuitively obvious.

Thorbjoern Ravn Ande~ (10-10-2004)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 10-10-04 21:18

Michael Knudsen <knudsen@imf.au.dk> writes:

> men når jeg indlæser siden (test.cgi) i min browser, skriver den blot
> -1. Hvad mon der går galt?

Prøv med en absolut sti til java.

Herudover vil du nok opdage at det tager så lang tid at køre din
kommando, at du nok ikke vil gå i drift med det. Det tager
laaaaaaaaang tid at start en JVM op (hvilket mulighvis er bedre i
1.5).

Du skal finde en måde, så JVM'en kører hele tiden.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk - Unix, Java, Web, Netværk, Århus

Michael Knudsen (10-10-2004)
Kommentar
Fra : Michael Knudsen


Dato : 10-10-04 21:31

Thorbjoern Ravn Andersen wrote:

> Prøv med en absolut sti til java.

Snedigt! Det var lige det, der skulle til. Nu mangler jeg bare at finde
ud af, hvorfor der bliver tiføjet et 0 til sidst. Det ser mystisk ud...

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<H1>Hello World</H1>\n";
$a = system ("/usr/java/j2sdk1.4.2_05/bin/java Test");
print $a;

Giver følgende output i browseren:

Hello World
Test! 0

--
Michael Knudsen

Kristian Thy (10-10-2004)
Kommentar
Fra : Kristian Thy


Dato : 10-10-04 22:21

Michael Knudsen uttered:
> Snedigt! Det var lige det, der skulle til. Nu mangler jeg bare at finde
> ud af, hvorfor der bliver tiføjet et 0 til sidst. Det ser mystisk ud...
>
> #!/usr/bin/perl
> print "Content-type: text/html\n\n";
> print "<H1>Hello World</H1>\n";
> $a = system ("/usr/java/j2sdk1.4.2_05/bin/java Test");
> print $a;
>
> Giver følgende output i browseren:
>
> Hello World
> Test! 0

Mit bud: system(...) udskriver "Hello World\nTest!" og lægger
exitværdien 0 (udført uden fejl) ind i $a, som du derefter printer.

Er der nogen grund til at du ikke kører en Tomcatserver på din maskine?
Det er da 100 gange nemmere end at tæske det gennem perl

\\kristian
--
<URL:http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt>
<URL:http://home.att.net/~jbcole/humor/Microsoft_patents.htm>

Jesper Hansen (10-10-2004)
Kommentar
Fra : Jesper Hansen


Dato : 10-10-04 23:11


> Er der nogen grund til at du ikke kører en Tomcatserver på din maskine?
> Det er da 100 gange nemmere end at tæske det gennem perl

*host* han kan ikke finde ud af det *host*

Michael Knudsen (11-10-2004)
Kommentar
Fra : Michael Knudsen


Dato : 11-10-04 06:48

Jesper Hansen wrote:

> *host* han kan ikke finde ud af det *host*

Grrrr ... du ved godt, at det er dit job at løse sådan nogle problemer
for mig

--
Michael

Thomas S. Iversen (11-10-2004)
Kommentar
Fra : Thomas S. Iversen


Dato : 11-10-04 07:35

On 2004-10-11, Michael Knudsen <knudsen@imf.au.dk> wrote:

>> *host* han kan ikke finde ud af det *host*
>
> Grrrr ... du ved godt, at det er dit job at løse sådan nogle problemer
> for mig

Gerne, men det koster

Thomas

Jesper Hansen (11-10-2004)
Kommentar
Fra : Jesper Hansen


Dato : 11-10-04 09:24

Thomas S. Iversen wrote:
> On 2004-10-11, Michael Knudsen <knudsen@imf.au.dk> wrote:
>
>
>>>*host* han kan ikke finde ud af det *host*
>>
>>Grrrr ... du ved godt, at det er dit job at løse sådan nogle problemer
>>for mig
>
>
> Gerne, men det koster

næmli'

Thorbjoern Ravn Ande~ (11-10-2004)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 11-10-04 04:22

Michael Knudsen <knudsen@imf.au.dk> writes:

> Snedigt! Det var lige det, der skulle til. Nu mangler jeg bare at
> finde ud af, hvorfor der bliver tiføjet et 0 til sidst. Det ser

Du udskriver $a. Læs på hvad "system" returnerer.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk - Unix, Java, Web, Netværk, Århus

Kim Hansen (10-10-2004)
Kommentar
Fra : Kim Hansen


Dato : 10-10-04 22:12

Michael Knudsen <knudsen@imf.au.dk> writes:

> og dernæst har jeg lavet en cgi-fil:
>
> #!/usr/bin/perl
> print "Content-type: text/plain\n\n";
> $a = "java Test";
> $b = system ($a);
> print $b;

$b kommer ikke til at indeholde det som java-programmet skriver, men
exit-status fra system-kaldet. Du har brug for qx// som er beskrevet i
perlop.

Læs om det i 'perldoc -f system', især afsnit 3.

--
Kim Hansen | |\ _,,,---,,_ | Det er ikke
Vadgårdsvej 3, 2.tv. | /,`.-´` -. ;:-. | Jeopardy.
2860 Søborg | |,4- ) )-,_. ,\ ( `'-' | Svar _efter_
Tlf: 39 56 24 37 | '---''(_/--' `-'\_) | spørgsmålet.

Thomas S. Iversen (10-10-2004)
Kommentar
Fra : Thomas S. Iversen


Dato : 10-10-04 23:26

On 2004-10-10, Michael Knudsen <knudsen@imf.au.dk> wrote:


> $b = system ($a);
> print $b;

> men når jeg indlæser siden (test.cgi) i min browser, skriver den blot
> -1. Hvad mon der går galt?

Du får returværdien af udførelsen af javaprogrammet. Også kaldet exit koden.
Dvs. du får at vide om programmet har termineret korrekt eller ej. Faktisk
ikke helt. Du skal så vidt jeg husker lige dividere med 256 før du får den
rigtige returværdi, men det er altså returværdien og ikke andet du står med
efter en system($a).

man perl er et godt sted at starte. Ligeså er o'reileys bøger.

Thomas

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408528
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste