Seite 1 von 1

RunProgram() Probleme

Verfasst: 16.11.2008 23:03
von zoidberg
Hallo!

Ich wollte jetzt die Konsolenausgabe eines Befehls abgreifen um die Angaben weiterverwenden zu können. Das gelingt mir nicht.
Nun hatte ich die Idee das ganze in eine Textdatei umzuleiten
Doch es klappt nicht. Die Zeile die ich mit RunProgram() starte ist identisch mit der, wo ich in der Konsole eine Textdatei mit den Exif Informationen erhalte. Aber es wird aus meinem Programm heraus keine Datei erzeugt.

Kennt sich jemand damit aus?

Code: Alles auswählen

name.s = "identify"
parameter.s = " -format %[EXIF:*] IMG_3646.JPG > info.txt"
MessageRequester ("info", name + parameter)
RunProgram(name, parameter, "/home/steffen/test")
End 
Danke!

Gruß, Steffen

Verfasst: 17.11.2008 02:17
von walker
Hi,

da Du die Parameter für das Programm identify angibst, ist eine Shell-Umleitung mit > NICHT gleichzeitig möglich... der komplette String wird an das aufgerufene Programm gegeben ... ohne eine shell (und nur diese versteht das >) :shock:

Hier musst Du ein paar Zeilen mehr investieren, um das gewünschte Ergebnis zu bekommen :D (habe das für meinen Rechner angepasst; Dateiname austauschen und ggf. das Directory wieder ändern)
(und ggf. auch die Repeat Schleife in eine While/Wend ändern)

Code: Alles auswählen

name.s = "identify"
parameter.s = "-format %[EXIF:*] dsc03489.jpg"
; MessageRequester ("info", name + parameter)
mypgm= RunProgram(name, parameter, ".",  #PB_Program_Open|#PB_Program_Read)

Repeat
    Debug ReadProgramString(mypgm)
Until Not ProgramRunning(mypgm)

End 
Den Debug output kannst Du natürlich in eine Datei schreiben oder direkt verwenden... wie auch immer :wink:
weitere Info's findest Du in der PB-Hilfe (unter RunProgramm)

Verfasst: 17.11.2008 09:58
von zoidberg
Hallo walker!

Ich hatte es vorher auch mit #PB-Program_Read versucht. war aber gescheitert. So kam mir die Idee mit der Textdatei.

Da muss man aber erst mal drauf kommen das der nicht alles weiterverarbeiten kann.

Dennoch finde ich es sehr praktisch, daß man die Exif Informationen so einfach bekommt, da die anderen Lösungen für mich zu kompliziert waren.

Ich möchte ein kleines Frontend für Image Magick machen, damit ich meine Bilder verkleinern, umbenennen und mit Datumsstempel usw. versehen kann. Ich hatte sowas mal im Netz gefunden, aber finde es nicht mehr.

Nun möchte ich eine eigene Version machen.

Weißt Du ob es diese ImageMagick Funktionalität auf Konsolenebene auch für Windows gibt? Also ob ich die fertige Version für Linux und Windows veröffentlichen kann?

Vielen Dank auf jeden Fall für Deine Hilfe!

Gruß, Steffen

Verfasst: 17.11.2008 11:21
von walker
Hallo,

ja, das gibt es auch für Windows... http://www.imagemagick.org/script/binary-releases.php (etwas weiter unten auf der Seite...) und auch für MacOS X (das solltest Du nicht vergessen ...) Dürfte also kein Problem sein, ein Cross-Plattform Tool zu schreiben.

Bin mal auf die 1. Version gespannt :wink:

Viele Grüße

Verfasst: 17.11.2008 14:51
von zoidberg
Ich bin auch gespannt.

Aber theorisch ist es doch so, daß ich wenn man per Dateiauswahldialog den Pfad angibt und ich keine feste Vorgabe wie jetzt (/home/steffen/test) verwende, dann ist der Code doch für alle Plattformen gleich ,oder?

Es muss halt vorher mit der "ich weiß nicht wie die jetzt heißt" Funktion zum Prüfen ob es sich um ein installiertes Programm handelt geschaut werden ob Imagemagick installiert ist.

Ich werds erst mal so für Linux machen weil ich es ja auch dort verwenden möchte.

Erwarte aber nichts großes. Das Frontend wird im Zweifelsfall nur die Basisfunktionen enthalten.

Für KDE gibts das ja schon als Plugin für den Dateimanager. Da kannste das einfach im Menü angeben was Du mit den Bildern machen willst.
Hab es aber für XCFE oder Gnome noch nie gesehen.

Ich bin auf jeden Fall Dankbar für Deine Hilfe!

Gruß, Steffen

Verfasst: 17.11.2008 17:41
von walker
... nicht nur theoretisch :wink:
Einfach keine festen Pfadangaben und nur in PB vorhandene Befehle (keine Api) und schon sollte es funktionieren...

EDIT:

hier eine kleine Funktion, um festzustellen, ob das Programm installiert ist:

Code: Alles auswählen

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    pgm.s = "identify.exe"
CompilerEndIf
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
    pgm.s = "identify"
CompilerEndIf
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
    pgm.s = "identify" ;<<- dies muss entsprechend geändert werden!!!! habe keinen zugriff auf Mac OS X
CompilerEndIf

mypgm = RunProgram(pgm, "-help", "", #PB_Program_Open | #PB_Program_Read)

If FindString(ReadProgramString(mypgm), "ImageMagick", 1)
    Debug "Programm ist installiert"
Else
    Debug "Bitte ImageMagick installieren!"
EndIf
zu prüfen ist auch noch, ob in allen 3 OS die 1. Ausgabezeile den Namen und die Version enthält ... denke aber, das ist so..