Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Java] Piping in de Runtime.exec()

Pagina: 1
Acties:

Verwijderd

Topicstarter
Probeer met het volgende stukje code iets op de commandline (dmv runas commando) uit te voeren, maar ik krijgt steeds de volgende output terug:
code:
1
Finished with exit code 1

'1' is de waarde die ik terugkrijg van proc.waitFor(); en aangezien die '0' moet zijn is dit niet goed :-) Sowieso krijg ik niet de output die ik verwacht.

Dit is de code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Runtime rt = Runtime.getRuntime();
String[] command = {
            "runas",
            "/user:\"MyUser\"",
            "c:\\Path\\prog.exe",
            "-param1",
            "value1",
            "-param2",
            "value2",
            "|",
            "d:\\Sanur\\sanur",
            "pwd"};

Process proc = rt.exec(command);
int exitVal = proc.waitFor();
out.print("\nFinished with exit code "+ exitVal);


Ook heb ik het volgende als geprobeerd als command[] variabele, maar had net zo weinig resultaat:
Java:
1
2
3
4
String[] command = {
            "cmd",
            "/c",
            "runas /user:\"MyUser\" \"c:\\Path\\prog.exe -param1 value1 -param2 value2 | d:\\Sanur\\sanur pwd"};


Dit werkt vervolgens wel:
Java:
1
2
3
4
String[] command = {
            "cmd",
            "/c",
            "runas /user:\"MyUser\" \"c:\\Path\\prog.exe -param1 value1 -param2 value2"};


Het lijkt dus aan die pipe te liggen, maar kom er maar niet achter hoe ik dit voor elkaar krijg.
Iemand enig idee?

PS: heb ook al geprobeerd om alles in een batch file te stoppen die dan vervolgens uit te voeren dmv Runtime.exec(), maar dit gaat net zo goed mis.

  • misfire
  • Registratie: Maart 2001
  • Laatst online: 12-10-2024
Ik heb het nooit geprobeerd, maar ik kan me goed voorstellen dat piping niet zo maar zou werken vanuit dit commando. Heb je al geprobeerd de output van het process uit te lezen met Process.getErrorStream()/getOutputStream()? Dan kun je eventuele meldingen ook zien. Met getOutputStream zou je overigens ook zelf kunnen pipen vanuit Java.

Verwijderd

Topicstarter
Je de output van het proces wordt uitgelezen met getInputStream() en getErrorStream(), maar dat geeft in dit geval geen resultaat.
Met getOutputStream zou je overigens ook zelf kunnen pipen vanuit Java.
Je bedoelt dat ik dan wat ik nu pipe, dat ik dat met de een OutputStream() wegschrijf? eens even proberen dan.

Verwijderd

Topicstarter
Heb nu de pipe uit de command[] variabele gehaald en krijgt dit dan als output op mijn scherm:
code:
1
2
3
Enter the password for SQL_Admin: 

Finished with exit code 1


dus zoek nu een oplossing om dat wachtwoord in te kunnen typen, maar dat krijg ik maar niet voor elkaar..

Heb het met die OutputStream() geprobeer op de volgende manier, maar dat heeft dus geen effect.
Java:
1
2
3
Process proc = rt.exec(command);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream());
writer.write("pwd");


Iemand suggesties?

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
euhm, om data uit een bestand te voeren aan een programma op de commandline gebruik je toch < en niet |. Als ik me niet vergis.

Heb je het commando dat je nu uitvoert vanuit je programma uberhaupt al met de hand getest op de commandline zelf?

Onder unix/linux kun je dus iets als

code:
1
mysqladmin -u ikke -p < cat /usr/home/ikke/passwd.mysql


doen, denk ik. Kan het niet testen hier.
Hoe dat precies onder windows moet werken weet ik niet.

[ Voor 30% gewijzigd door Grijze Vos op 24-07-2007 14:44 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Verwijderd

Topicstarter
euhm, om data uit een bestand te voeren aan een programma op de commandline gebruik je toch < en niet |. Als ik me niet vergis.
Dat klopt, maar ik haal de data ook niet uit een bestand, maar roep een bestandje aan (sanur.exe) die vervolgens weer wat uitvoert (wachtwoord me invult voor het runas commando)

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 30-11 11:20

voodooless

Sound is no voodoo!

Verwijderd schreef op dinsdag 24 juli 2007 @ 13:15:
Heb het met die OutputStream() geprobeer op de volgende manier, maar dat heeft dus geen effect.
Java:
1
2
3
Process proc = rt.exec(command);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream());
writer.write("pwd");
Zonder regeleinde gaat dit niet werken vrees ik. Probeer er eens een \r\n achter te sturen. Test je pipe commando ook eens op het "droge" uit, ik denk niet dat het zo gaat werken.

Verder graag ik eigenlijk ook af wat je nu precies wil doen. Je wil naar een SQL admin? Misschien kun je dit soort dingen wel veel makkelijker met de standaard JDBC drivers doen?

Do diamonds shine on the dark side of the moon :?


Verwijderd

Topicstarter
De regeleinde einden hebben ook geen effect.

En wat ik wil: ik wil een agent uit SQL Server starten dmv een batch file. En die batch file die wil ik runnen vanuit een jsp file. En aangezien de SQL Server service draait op een apart account, zal ik die batch file vanuit een bepaalde user moeten runnen.

Verwijderd

Topicstarter
niemand verder?

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Je forward nu de output van "c:\\Path\\prog.exe" naar "d:\\Sanur\\sanur", terwijl je volgens mij precies het omgekeerde effect wilt hebben.
Pagina: 1