Java and Linux Problems !!

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
PaP
Venus Project Founder
Venus Project Founder
Posts: 1077
Joined: Wed Apr 21, 2004 12:06 am
Academic status: Alumnus/a
Location: San Francisco
Contact:

Java and Linux Problems !!

Post by PaP » Tue May 04, 2004 5:56 pm

Ξαναπαραθέτω τον καινούριο κώδικα. Οσο για τις παραμέτρους που παίρνει το cgi τις εχω βάλει μέσα στο cmd χώρις εκείνο το ηλίθιο OutPutStream Που βλέπετε εδώ αλλά και πάλι τίποτα.
Η ερώτηση μου είναι σχετικά απλή ! Πώς μπορώ να τρέξω ένα cgi-script περνώντας του ένα ορισμένο argument...
Είμαι τουλάχιστον 2 εβδομάδες στο ίδιο σημείο !!!

Code: Select all

//Set environment variables
String[] setVar = {"REQUEST_METHOD=POST","CONTENT_LENGTH="+extra.length};
String[] cmd = {"/bin/bash","./home/pap/jhttp"+Petition_Analysis.pt.uri.path};

//Execute the cgi-bin with the appropriate input
Process cgiOut = Runtime.getRuntime().exec(cmd,setVar);

// get its output (your input) stream
DataOutputStream put = new DataOutputStream(cgiOut.getOutputStream());
put.writeBytes(Petition_Analysis.pt.Pet_Body);
DataInputStream in = new DataInputStream(cgiOut.getInputStream());

// Read and print the output
String line;
StringBuffer page = new StringBuffer();
while ((line = in.readLine()) != null) {
page.append(line);
}

//Send page to client
out.print("HTTP/1.1 200 OK\r\n");
out.print("Content-Length: " + page.toString().length() +"\r\n\r\n");
System.out.print(page);


Cgi call is like that:
./post_from.cgi
first_operand=342&second_operand=32&operation=-[/code]
Last edited by PaP on Wed May 12, 2004 7:44 pm, edited 2 times in total.
User avatar
vagalati
Mbyte level
Mbyte level
Posts: 579
Joined: Tue Mar 16, 2004 2:46 pm
Location: 7000 miles away from aueb

Post by vagalati » Tue May 04, 2004 10:15 pm

Απ'ότι καταλαβαίνω εσύ δημιουργείς ένα παιδί της διεργασίας που τρέχεις, το οποίο (παιδί) είναι το γνωστό bash. Ότι μεταβλητή και να βάλεις εκεί όμως θα ισχύει σε εκείνο το session μόνο και όχι globally με αποτέλεσμα να φαίνεται σαν να μη κάνει τίποτα.
Ni!! Ni!! Ni!!
User avatar
PaP
Venus Project Founder
Venus Project Founder
Posts: 1077
Joined: Wed Apr 21, 2004 12:06 am
Academic status: Alumnus/a
Location: San Francisco
Contact:

Post by PaP » Tue May 04, 2004 11:03 pm

Ξέρεις τι μπορώ να κάνω για αυτό;
Θέλω δυο μεταβλητές περιβάλλοντος και στο καπάκι να τρέξω ένα cgi-bin.
Τρέχει μεν αλλά χωρίς τις μεταβλητές δεν κάνει τίποτα....
User avatar
HdkiLLeR
Venus Project Founder
Venus Project Founder
Posts: 4356
Joined: Tue Jan 27, 2004 4:41 pm
Academic status: Alumnus/a
Gender:
Location: New York, NY
Contact:

Post by HdkiLLeR » Wed May 05, 2004 2:02 am

Θέσε global μεταβλητή περιβάλοντος.
Όπως σου είπαν και παραπάνω με τον τρόπο που το κάνεις μόλις επιτρέψει η διεργασία παιδί σταματάει να υπάρχει η μεταβλητή που έθεσες. Αυτό που μπορείς να κάνεις είναι αντί για export κάνε setenv προκειμένου να θέσεις κάτι globally.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d-->--- s+:+ a- C++(+++) BILS++++$ P--- L++++>+++++ E--- W+++ N+ o+ K w--
O M+ V-- PS++>+++ PE- Y++ PGP++ t+ 5+ X+ R* tv b++ DI- D+ G+++ e+++>++++ h r++ y++
------END GEEK CODE BLOCK------

"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis Ritchie
User avatar
PaP
Venus Project Founder
Venus Project Founder
Posts: 1077
Joined: Wed Apr 21, 2004 12:06 am
Academic status: Alumnus/a
Location: San Francisco
Contact:

Setenv ??

Post by PaP » Wed May 05, 2004 2:58 pm

Δε μπορώ να τη βρω ούτε στο σύστημα μου ούτε σε αυτό του πανεπιστημίου. Ναι μεν το δικό μου είναι Mandrake αλλά στη σχολή είνα Debian
User avatar
vagalati
Mbyte level
Mbyte level
Posts: 579
Joined: Tue Mar 16, 2004 2:46 pm
Location: 7000 miles away from aueb

Post by vagalati » Wed May 05, 2004 11:47 pm

Νομίζω ότι η setenv κάνει το ίδιο πράγμα με την export αλλά είναι σε csh και όχι σε bash. Αρχίζω να πιστεύω ότι αυτό που ζητάς είναι αδύνατο (θα ήταν εφικτό αν μπορούσαμε να εκτελέσουμε την export στο shell μαμά (και όχι παιδί) του προγράμματος java που εκτελείς αφού οι μεταβλητές του parent είναι προσβάσιμες απο τα παιδιά. Αν βρώ κάποια εντολή που να κάνει ότι και η export αλλά globally θα σε ενημερώσω...
PaP wrote:Ναι μεν το δικό μου είναι Mandrake αλλά στη σχολή είνα Debian
Σβήσε το γρήγορα πριν σε δεί ο σκληροσκοτώστρας (καραδοκεί τελευταία με μια καραμπίνα και είναι έτοιμος να βαρέσει όποιον λέει κάτι τέτοιο. :-D :-D :-D )
Ni!! Ni!! Ni!!
User avatar
HdkiLLeR
Venus Project Founder
Venus Project Founder
Posts: 4356
Joined: Tue Jan 27, 2004 4:41 pm
Academic status: Alumnus/a
Gender:
Location: New York, NY
Contact:

Post by HdkiLLeR » Thu May 06, 2004 2:44 am

Όπως το λέει ο vagalati είναι τελιά το setenv έιναι σχεδόν ίδιο με το export. Βασικά γιατί δεν δοκιμάζεις το εξής:

1)Κάνε login και άνοιξε ένα session.
2)Όρισε με το χέρι την μεταβλητή export blah blah.
3)και στην συνέχεια τρέξε το προγραματάκι σου.

Με αυτόν τον τρόπο μιας και το prog θα εκτελεστεί σε μια διεργασία child και σε αυτήν θα έχουν περάσει οι μεταβλητές που έχουν οριστεί απο την διεργασία(bash) γονέα. Δεν ξέρω βέβαια εάν σε βοηθήσει αυτό αλλά σαν σκέψη στο λέω.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d-->--- s+:+ a- C++(+++) BILS++++$ P--- L++++>+++++ E--- W+++ N+ o+ K w--
O M+ V-- PS++>+++ PE- Y++ PGP++ t+ 5+ X+ R* tv b++ DI- D+ G+++ e+++>++++ h r++ y++
------END GEEK CODE BLOCK------

"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis Ritchie
User avatar
vagalati
Mbyte level
Mbyte level
Posts: 579
Joined: Tue Mar 16, 2004 2:46 pm
Location: 7000 miles away from aueb

Post by vagalati » Thu May 06, 2004 3:58 pm

Έψαξα για την εντολή να ορίζει variables ορατά σε όλα τα shells που ανοίγεις αλλά φαίνεται να μην υπάρχει κάτι τέτοιο. Μπορείς να μας πείς γιατί το θες αυτό; (Φαντάζομαι ότι κάποιο άλλο πρόγραμμα θα διαβάζει την μεταβλητή.)
Ni!! Ni!! Ni!!
User avatar
PaP
Venus Project Founder
Venus Project Founder
Posts: 1077
Joined: Wed Apr 21, 2004 12:06 am
Academic status: Alumnus/a
Location: San Francisco
Contact:

Μεταβλητές ΟΚ, αλλά...

Post by PaP » Wed May 12, 2004 7:42 pm

Σύμφωνα με το ΑΡΙ τησ Java στην εντολη exec περνάς πρώτα έναν πίνακα με τις εντολές που θες και μετα με τισ μεταβλητές περιβάλλοντος που χρειάζεισαι. Οπότε είμαστε ΟΚ, κοιτάχτε το αρχικό ποστ γιατί το έχω αλλάξει. Και πάλι όμως δε λειτουργει !!!
User avatar
HdkiLLeR
Venus Project Founder
Venus Project Founder
Posts: 4356
Joined: Tue Jan 27, 2004 4:41 pm
Academic status: Alumnus/a
Gender:
Location: New York, NY
Contact:

Re: Java and Linux Problems !!

Post by HdkiLLeR » Wed May 12, 2004 9:25 pm

PaP wrote:

Code: Select all

//Set environment variables
String[] setVar = {"REQUEST_METHOD=POST","CONTENT_LENGTH="+extra.length};
String[] cmd = {"/bin/bash","./home/pap/jhttp"+Petition_Analysis.pt.uri.path};
Petition_Analysis.pt.uri.path αυτό που έιναι ορισμένο και τι τιμή έχει;
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d-->--- s+:+ a- C++(+++) BILS++++$ P--- L++++>+++++ E--- W+++ N+ o+ K w--
O M+ V-- PS++>+++ PE- Y++ PGP++ t+ 5+ X+ R* tv b++ DI- D+ G+++ e+++>++++ h r++ y++
------END GEEK CODE BLOCK------

"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis Ritchie
User avatar
PaP
Venus Project Founder
Venus Project Founder
Posts: 1077
Joined: Wed Apr 21, 2004 12:06 am
Academic status: Alumnus/a
Location: San Francisco
Contact:

Post by PaP » Wed May 12, 2004 10:21 pm

Είναι το σχετικό URL που στην ουσία δίνει το script που πρέπει να εκτελεσθεί.
Επίσης έχω αφαιρέσει την τελεία από μπροστα γιατί δε χρείαζεται μέτα από δοκιμές
User avatar
Einherjar
Venus Project Founder
Venus Project Founder
Posts: 3751
Joined: Tue Jan 27, 2004 4:42 pm
Academic status: Alumnus/a
Gender:
Location: Washington DC, USA
Contact:

Post by Einherjar » Wed May 12, 2004 11:46 pm

Λογικά το σκριπτάκι σου θα παίρνει σαν παράμετρο string (δεν κατάλαβα τι είναι το Petition_Analysis.pt.Pet_Body). οπότε δεν χρειάζεται να φτιάξει DataOutputStream. Σου αρκεί ένα PrintWriter. Μπορείς να κάνεις δηλαδή:

Code: Select all

PrintWriter put = new PrintWriter(cgiOut.getOutputStream());
put.println(Petition_Analysis.pt.Pet_Body);
put.close();
και όμοια χωρίς να φτιάξεις ένα DataInputStream μπορείς να κάνεις το παρακάτω

Code: Select all

BufferedReader in = new BufferedReader( new InputStreamReader(cgiOut.getInputStream()));
String line;

while ((line = in.readLine()) != null)
    page.append(line); 

in.close();
Ελπίζω να βοήθησα
[Better to understand a little than to misunderstand a lot]
User avatar
PaP
Venus Project Founder
Venus Project Founder
Posts: 1077
Joined: Wed Apr 21, 2004 12:06 am
Academic status: Alumnus/a
Location: San Francisco
Contact:

Post by PaP » Fri May 14, 2004 5:37 pm

Σορρυ για τα αγγλικά αλλά το έκανα copy-paste από το φόρουμ της Χάβα (όπως λένε και οι ισπανοί :-) )

Final Code ! Works but still is missing something.
The problem now is that the cgi script only reads one argument of the input, normally there are three. So i have only 1/3 of the normal ouput. As i posted before the cgi scipt works flawlessly in command prompt. One more little problem is that i view the full html code in my browser window and not the hypertext

Code: Select all

//Set environment variables
String[] setVar = {"CONTENT_LENGTH="+extra.length,"REQUEST_METHOD=POST"};
String[] cgi = {"python","/home/pap/jhttp"+Petition_Analysis.pt.uri.path};

//Execute the cgi-bin with the appropriate input
Process cgiOut = Runtime.getRuntime().exec(cgi,setVar);

DataOutputStream put = new DataOutputStream(cgiOut.getOutputStream());
put.writeChars(Petition_Analysis.pt.Pet_Body);
put.flush();
put.close();
InputStream in = cgiOut.getInputStream();

// Read and print the output
int c;
StringBuffer page = new StringBuffer();

c = in.read();
while (c!=-1){
if (c>0)
page.append((char) c);
c = in.read();
}

in.close();
//Send page to client
out.print("HTTP/1.1 200 OK\r\n");
out.print("Content-Length: " + page.length() +"\r\n\r\n");
out.print(page);
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :shock: :shock:
User avatar
Einherjar
Venus Project Founder
Venus Project Founder
Posts: 3751
Joined: Tue Jan 27, 2004 4:42 pm
Academic status: Alumnus/a
Gender:
Location: Washington DC, USA
Contact:

Post by Einherjar » Fri May 14, 2004 6:18 pm

Το κοίταξες καθόλου αυτό που σου έγραψα ή τσάμπα το έγραφα??? :???:
[Better to understand a little than to misunderstand a lot]
User avatar
PaP
Venus Project Founder
Venus Project Founder
Posts: 1077
Joined: Wed Apr 21, 2004 12:06 am
Academic status: Alumnus/a
Location: San Francisco
Contact:

Post by PaP » Fri May 14, 2004 6:58 pm

Ναι το κοίταξα και το μόνο που όπως βλέπω έχω ξεχάσει είναι το println
Post Reply

Return to “Προγραμματισμός”