Kann man STDIN Werte übergeben?
Andres Freund
- perl
Hallo
ALso, ich habe das folgende Problem: Ich führe mit eval() ein anderes Script aus und will diesem bestimmte parameter übergeben. Mit den get Werten ist mir dies über
$ENV{"QUERY_STRING"} = "parameter = parameterinhalt";
auch gelungen, aber hat einer von euch eine Idee wie ich dies mit STDIN machenkann? Kann sein das ich gerade etwas auf dem Schlauch liege.
Vielen Dank
Andres Freund
Ps: Mein Kopf (bessergesagt mein Gehirn) raucht langsam ;-)
Hallo, hier bin ich nochmal,
Falls niemand wissen sollte wie das alles geht, hättet ihr eine wie man dem script (auf das ich keinen Einfluß habe) in dem eval Block die Post inhalte zukommen lassen könnte?
rätselnde Grüße
Andres
Hallo, hier bin ich nochmal,
dito <!-- Begrüssung ;)
Falls niemand wissen sollte wie das alles geht, hättet ihr eine wie man dem script (auf das ich keinen Einfluß habe) in dem eval Block die Post inhalte zukommen lassen könnte?
Öm. Wie wäre es, wenn du die GET-Methode simulierst???
{
local $ENV{QUERY_STRING};
$ENV{QUERY_STRING} = 'what ever you want to give the script...';
eval {...}
}
dem QueryString kannst du natürlich dann auch die POST Daten übermitteln... Zumindest mit CGI.pm funktioniert das, meinen unbestätigten Gedanken zur Folge, gut.
Viele Grüsse
Philipp
Hallo, hier bin ich nochmal,
dito <!-- Begrüssung ;)
Falls niemand wissen sollte wie das alles geht, hättet ihr eine wie man dem script (auf das ich keinen Einfluß habe) in dem eval Block die Post inhalte zukommen lassen könnte?
Das Problem ist, das icgh auf das im eval Block ausgeführte wie gesagt keinen Einfluß habe und die dort benutzten Methoden die Parameter zu bekommen eventuell nicht so intelligent sin wie CGI.pm.
Notfalls werde ich es aber so machen müssen.
Danke!
Andres Freund
Philipp
Halihallo Andres
Falls niemand wissen sollte wie das alles geht, hättet ihr eine wie man dem script (auf das ich keinen Einfluß habe) in dem eval Block die Post inhalte zukommen lassen könnte?
Das Problem ist, das icgh auf das im eval Block ausgeführte wie gesagt keinen Einfluß habe und die dort benutzten Methoden die Parameter zu bekommen eventuell nicht so intelligent sin wie CGI.pm.
Notfalls werde ich es aber so machen müssen.
Du solltest etwas weniger reden, dafür etwas mehr zuhören. Dann würdest du erkennen, dass ich dir eine Lösung aufgezeigt habe ;)
Man braucht nicht die Intelligenz von CGI.pm um meinen Lösungsvorschlag benutzen zu können ;)
Sorry für die arroganten und überheblichen Sprüche, ich musste grad mal etwas Dampf ablassen.
Aber nun: Wie ist denn der Code in eval beschaffen? - Ich meine, woher kriegst du den Code, der dort drinne ausgeführt wird? - Ist das reiner ASCII-Text, der dort in eval eingebunden wird (eg. durch externe Datei), oder startest du dort ein Programm wiederum über einen HTTP-Request?
Und: Hast du meine Tipps überhaupt schon ausprobiert?
Viele Grüsse
Philipp
<-- der sich für das arrogante Posting schon jetzt entschuldigt, es jedoch nicht gleich unterlassen wollte, da er damit etwas Balast abwerfen kann, zu Lasten von Andres, der gar nix damit zu tun hat.
Halihallo
ALso, ich habe das folgende Problem: Ich führe mit eval() ein anderes Script aus und will diesem bestimmte parameter übergeben. Mit den get Werten ist mir dies über
$ENV{"QUERY_STRING"} = "parameter = parameterinhalt";
auch gelungen, aber hat einer von euch eine Idee wie ich dies mit STDIN machenkann? Kann sein das ich gerade etwas auf dem Schlauch liege.
ist zwar eine Vergewaltigung von allem, was mir lieb ist, aber... :-)
{
local *STDIN;
open( STDIN, '<./input_data.txt' );
eval {...}
}
Viele Grüsse
Philipp
Hi,
Ich führe mit eval() ein anderes Script aus
warum? Was fehlt Dir bei "system()" oder backquotes
, die beide dafür
gedacht sind, andere Programme auszuführen?
und will diesem bestimmte parameter übergeben.
Wenn Du mit Parametern das meinst, was man als Kommandozeilenparameter
normalerweise so verwendet, dann verwende Kommandozeilenparameter.
(Was natürlich voraussetzt, daß das aufgerufene Programm Kommandozeilen-
parameter erwartet und nichts anderes. Tut es das? Wie sind seine
Aufrufbedingungen?)
Mit den get Werten ist mir dies über
$ENV{"QUERY_STRING"} = "parameter = parameterinhalt";
auch gelungen, aber hat einer von euch eine Idee wie ich dies mit
STDIN machenkann? Kann sein das ich gerade etwas auf dem Schlauch liege.
Das klingt für mich alles so, als würdest Du mit Gewalt Interprozeß-
kommunikation via HTTP simulieren wollen. Das ist aber nicht der Sinn
von HTTP.
Wenn Du ein weiteres Programm starten und diesem Programm Daten via
stdin übergeben willst, dann schreibe die Daten nach stdout und ver-
binde beide Programme über eine Pipe - damit wird das stdout des ersten
Programms zum stdin des zweiten.
Sollte dies Dein Szenario nicht korrekt beschreiben, dann fehlen
wesentliche Teile Deiner Aufgabenstellung in Deinem Posting.
Viele Grüße
Michael
Hi,
Das klingt für mich alles so, als würdest Du mit Gewalt Interprozeß-
kommunikation via HTTP simulieren wollen. Das ist aber nicht der Sinn
von HTTP.
Es geht um Perl über CGI, Sorry das ich Vergessen habe das zu erwähnen. Ich will in einem Scipt ein anderes einbinden, und diesem die Parameter (damit meine ich die mit Get und Post übergebenen Daten) übergeben die es bei direktem aufruf auch bekommen würde. Da ich auf die Scripts keinen Einfluss habe, muss ich die normale Http umgebung simulieren, oder hättest du (oder jemand anderes) da eine andere Idee?
Wenn Du ein weiteres Programm starten und diesem Programm Daten via
stdin übergeben willst, dann schreibe die Daten nach stdout und ver-
binde beide Programme über eine Pipe - damit wird das stdout des ersten
Programms zum stdin des zweiten.
Wie geht das? Ich habe gedacht Pipes wären nur unter Linux verfügbar und (wie ich leider ebenfalls vergessen habe zu erwähnen) sollte dieses Script unter Win und Unix,Linux o.ä. laufen.
Sollte dies Dein Szenario nicht korrekt beschreiben, dann fehlen
wesentliche Teile Deiner Aufgabenstellung in Deinem Posting.
siehe oben.
Noch eine Frage: Kann man (oder Frau um korrekt zu sein ;-)) ein Filehandle (wie es STDOUT ja eigentlich ist) irgendwie in eine Variable umleiten? Ich müsste nähmlich den (mit print erzeugten)Output abfangen um ihn dann evtl. noch zu verändern.
Gerade ist mir eingefallen, das es evtl so gehen köntte, dass man STDOUT vom direktem Output lokal entbindet und dann mit READ liest (muss ich mal ausprobieren.
Viele Grüße und Vielen
Hi,
Das klingt für mich alles so, als würdest Du mit Gewalt Interprozeß-
kommunikation via HTTP simulieren wollen. Das ist aber nicht der Sinn
von HTTP.
Es geht um Perl über CGI, Sorry das ich Vergessen
habe das zu erwähnen.
Ich will in einem Scipt ein anderes einbinden,
was heißt nun schon wieder "einbinden"?
Gerade hatte ich geglaubt, verstanden zu haben, daß Du
von Skript A einen HTTP-Request an Skript B starten
willst und diesem dann Parameter mitgeben möchtest,
welche B über _seine_ CGI-Schnittstelle lesen kann.
und diesem die Parameter (damit meine ich die mit
Get und Post übergebenen Daten) übergeben die es
bei direktem aufruf auch bekommen würde.
Also doch. Ersetzen "Aufruf" durch "HTTP-Request".
Mit "eval" bist Du bei dieser Aufgabe im völlig
falschen Film.
Da ich auf die Scripts keinen Einfluss habe, muss
ich die normale Http umgebung simulieren,
Dazu hast Du aber nicht die geringste Chance - nicht
mal, wenn Du einen kompletten Webserver nachprogram-
mierst (weil Du zudem auch noch die komplette Web-
server-Konfiguration für B kennen müßtest).
oder hättest du (oder jemand anderes) da eine
andere Idee?
Sende einen HTTP-Request von A nach B. Dafür gibt
es in Perl fertige Module.
Für GET würde LWP::Simple reichen; für POST muß
es etwas mehr sein, beispielsweise LWP::UserAgent.
Beides ist im "lwpcook" beschrieben.
Wie geht das? Ich habe gedacht Pipes wären nur
unter Linux verfügbar und (wie ich leider ebenfalls
vergessen habe zu erwähnen) sollte dieses Script
unter Win und Unix,Linux o.ä. laufen.
Aha - Deine Aufgabenstellung beginnt langsam, Formen
anzunehmen. ;-)
Noch eine Frage: Kann man (oder Frau um korrekt zu
sein ;-)) ein Filehandle (wie es STDOUT ja
eigentlich ist) irgendwie in eine Variable umleiten?
Alles, was Du aus einem filehandle liest, kannst Du
einer Variable zuweisen ... war das Deine Frage?
Ich müsste nähmlich den (mit print erzeugten)Output
abfangen um ihn dann evtl. noch zu verändern.
Das verstehe ich nicht.
Wieso hältst Du nicht einfach Deine Ausgabe zurück,
bis Du weißt, was Du ausgeben willst?
(Liest mal "sprintf", das dürfte Dir weiter helfen.)
Viele Grüße
Michael