anderes Programm aufrufen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Hallo,

Kann ich innerhalb eines von Paint Shop Pro X erzeugten Skripts (ProcessDirectory.PspScript)
ein weiteres Skript (Groesse-72dpi-20cm-breit.PspScript) aufrufen?
Beide befinden sich Ordner \Programme\PSPX\Skripts (vertrauenswürdig).

Wenn ja, bitte wie?
Muß das aufgerufene Skript irgendwie angepaßt werden?

Trotz verzweifelter Suche habe ich bisher keine Beschreibung der Skript-Sprache gefunden;
wie z.B. der Makro-Editor in Microsoft-WORD.
Kann auch hier jemand helfen?

Code: Alles auswählen

  for File in CandidateFiles:
        print 'Opening file ', File
        # open the file
        try:
            App.Do( Environment, 'FileOpen', {
                    'FileList': [ File ], 
                    'GeneralSettings': {
                        'ExecutionMode': App.Constants.ExecutionMode.Silent, 
                        'AutoActionMode': App.Constants.AutoActionMode.Match
                        }
                    })
        except:
            print >>sys.stderr, 'Error opening file %s - skipping' % File

        # for simplicity, place your code in the ProcessFile method

#         hier soll der Aufruf eingefügt werden.       ######################
        
        # save the file
        try:
            if SaveFilesAfterProcessing == App.Constants.Boolean.true:
                App.Do( Environment, 'FileSave' )

            # close the file before going on to the next
            App.Do( Environment, 'FileClose' )

Danke und freundliche Grüße
hajo
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ziemlich spezielle Frage ;-) Ich würde mal tippen, dass man dazu in der Doku zu Paint Shop etwas finden sollte. Zudem gibt es dort sicherlich auch einen Support drum herum, oder? Sei es nun Hotline oder Forum wie hier... die Chance dort jemanden zu finden, der die Frage beantworten kann ist dort sicherlich ungleich höher im Vergleich zu hier :-D

Generell:

Die einfachste Möglichkeit besteht über den import-Mechanismus von Python. Damit kann man fremde Scripte leicht in ein eigenes einbinden. Bleibt die Frage, ob PSPX diesen nicht außer Kraft gesetzt bzw. eingeschränkt hat.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Hallo Hyperion,

PSP selbst liefert keinerlei Unterstützung, lediglich einen Texteditor!
Der neue Eigentümer Corel (früher Jasp) gibt keinen Support; Docs für die
Skriptsprache werden weder von Corel noch über Google angeboten.

Ich würde gern Deinem Tipp mit der Import-Funktion folgen; leider ist es mir
trotz mehrfacher Versuche nicht gelungen, Python auf meinem WIN XP Home-PC
zu starten. Nach der Installation und Doppelklick auf die EXE öffnet sich ein Fenster,
mit dem ich nichts anfangen kann.

Gruß
Hajo
deets

hajo hat geschrieben:PSP selbst liefert keinerlei Unterstützung, lediglich einen Texteditor!
Der neue Eigentümer Corel (früher Jasp) gibt keinen Support; Docs für die
Skriptsprache werden weder von Corel noch über Google angeboten.
Also nach ner Minute googeln kam zB das hier hoch:

http://www.talkgraphics.com/forumdispla ... t-Shop-Pro

Die scheinen da ueber PSP-Skripting zu diskutieren.
hajo hat geschrieben: Ich würde gern Deinem Tipp mit der Import-Funktion folgen; leider ist es mir
trotz mehrfacher Versuche nicht gelungen, Python auf meinem WIN XP Home-PC
zu starten. Nach der Installation und Doppelklick auf die EXE öffnet sich ein Fenster,
mit dem ich nichts anfangen kann.
Das ist erstens nicht weiter verwunderlich, weil Python kein Programm wie Word ist, sondern nur Sinn macht, wenn man ihm (es, ihr) ein Programm vorwirft. Es also einfach so zu starten fuehrt zur sofortigen Beendigung. Versuch stattdessen mal IDLE zu starten.

Und zum zweiten hilft dir das alles eh nix, weil dein PSP mit einem eingebauten Python daherkommt, und das kann bestimmte Dinge, aber andere sind ihm unter umstaenden abgewoehnt worden - wie Hyperion schon meinte.

Dein Skript waere aber auch 100% nicht importierbar, weil es Bindestriche enthaelt. Die werden in Python als Minus-Operator gebraucht, und darum kann man keine Skripte importieren, deren Namen diese enthalten.

Versuch einfach mal, ein Skript testskript.py mit nix weiter drin in deinen ...\Skripts Ordner zu legen, und in einem anderen Skript "import testskript" an den Anfang zu stellen. Wenn das durchkommt, ohne das was kracht, dann weisst du, wie du andere Skripte referenzieren kannst.

[edit] etwas praeziesiert, was man importieren kann[/edit]
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Hallo deets,

Danke für die WEB-Adresse; meine Anmeldung ist noch nicht bestätigt; ich konnte deshalb noch nicht aktiv werden.

Versuche mit einem Call-Aufruf sind bisher fehlgeschlagen:

1. Aufruf einer Datei .Py bringt den Hinweis: 'Keine Scriptdatei'

2. Aufruf einer Scriptdatei:

call TestScriptCall.PspScript
^
SyntaxError: invalid syntax

Hier mangelt es mir an Unterlagen über die Syntax der Skriptsprache.

Gruß
Hajo
BlackJack

@hajo: Der `SyntaxError` sieht so aus als wenn Du das in Python versucht hast -- das ist ja auch keine gültige Python-Syntax.
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Hallo BlackJack,

wie sieht denn die Python-Syntax aus?

Gruß
Hajo
BlackJack

@hajo: Jedenfalls nicht so. ``call`` ist in Python kein Schlüsselwort. Gültige Syntax ist ja unabhängig von dem Programm, in das Du die Skripte einbettest.
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Hallo BlackJack,

mir hilft es nicht weiter, wenn mir gesagt wird, wie etwas nicht geht.

Meine Situation:
ich habe keine Ahnung von Python. In PaintShopPro X wird eine Python-Script-Sprache verwendet,
für die es keinerlei Hilfestellung gibt. Man kann eine Skriptaufzeichnung erzeugen und sich dann den Skripttext ansehen und auch verändern; in einem Texteditor wie z.B. Notepad. Mit welchen commands in welcher Syntax zu arbeiten ist, ist mir also nicht bekannt.
Deshalb erhoffte ich mir Hilfe in diesem Forum.
Sieh' Dir bitte meine erste Frage in dieser Reihe an und sage mir, ob und wie ich an der gewünschten Stelle ein anderes Skript einbinden kann.


Vielleicht kannst Du mir auch sagen, ob 'Flip' ein Python-Command ist, und wo ich evtl. eine Auflistung der hier einsetzbaren Commands finde.

Code: Alles auswählen

def ProcessFile( Environment, FileName ):
    ' *** Process a single file - put your code here'
    print 'Processing File %s' % FileName
    App.Do( Environment, 'Flip' )
Gruß
Hajo
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

deets hatte Dir doch schon mal einen Weg aufgezeigt:

Code: Alles auswählen

# datei A.py
def foo():
    print "Hallo"

# Datei B.py
import A
A.foo()
`import` heißt das Statement, mit dem man andere Python-Module einbindet. Speicherst Du beide Dateien in einem Ordner und rufst dann den Python-Interpreter mit `B.py` als Parameter auf, so sollte ein "Hallo" in einer Windows-CMD erscheinen.

Das ganze musst Du nun versuchen in PSPX zu übertragen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@hajo: Wenn Du keine Ahnung von Python hast, damit aber etwas machen willst, dann müsstest Du es halt lernen. Wüsste nicht wie es anders gehen sollte‽

Das zweite Problem wäre dann Python-Wissen auf PaintShopPro (PSP) anzuwenden. Wenn es dazu keine Dokumentation gibt, wird das schwierig.

'Flip' so wie es da steht ist eine literale Zeichenkette. Das hat nicht wirklich etwas mit Python zu tun, sondern müsste irgendwo in der Dokumentation von PSP stehen. Was die Anwendung an "Kommandos" versteht und welche Argumente dafür übergeben werden müssen, ist ja absolut keine Python-Frage.

Wenn ich das richtig sehe, schreibt man Python-Module, in denen PSP bestimmte Funktionsdefinitionen erwartet und die es dann selbstständig aufruft. Dabei wird im globalen Namensraum anscheinend ein Objekt mit dem Namen `App` zur Verfügung gestellt, mit dem sich die Anwendung steuern lässt. Das ist PSP-spezifisch. Welche Attribute und Methoden dieses Objekt hat, muss dokumentiert sein. Sonst könnte man nur raten.

Die Dokumentation muss übrigens nicht unbedingt für Python sein. Falls es da noch andere Sprachen gibt, könnte das auch für die dokumentiert sein und man müsste dann sehen wie man es auf Python überträgt. Eine "pythonische" API hat das Ganze jedenfalls nicht.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

So, ich habe mal kurz gegoogelt und bin dabei auf folgende Seiten gestoßen:

http://www.jasc.com/support/kb/articles ... onents.asp
http://learning-psp.blogspot.com/2009/0 ... re-to.html

Auf der ersteren gibt es das zip-Archiv "Scripting for Script Authors". Da drin sind Demo-Scripts und auch ein PDF, welches Tutorial mäßig einiges erklärt und eine kurze Referenz beinhaltet. Es gibt auch noch eine komplette API-Referenz separat. Damit sollte man einiges anfangen können.

Speziell zu imports habe ich ehrlich gesagt nichts im Dokument auf die schnell gefunden. Da ist ein einfaches Ausprobieren - wie oben geschildert - wohl das Mittel der Wahl. Allerdings kann man wohl beliebige Python-Module aus der Standard-Lib importieren; das macht Hoffnung, dass man auch eigene Module importieren können sollte.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Hallo BlackJack,

vielen Dank für Deine aufgewandte Mühe.
Ich bin nun schon seit Tagen mit dem PSP-Problem beschäftigt, und Du hast mich jetzt darin bestärkt, die Suche nach einem automatisierten
Ablauf meiner gewünschten Änderungen aufzugeben.

Danke nochmals
Freundliche Grüße
Hajo
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@Hajo: Ich habe noch mal kurz nachgedacht. Zeig uns doch noch mal Deine zwei Scripte. Ich vermute mal, dass man den Kern des zweiten einfach simpel per copy&paste in das zweite reinpacken kann. (Eben weil alles per Kontext-Objekt "environment" gesteuert wird).

Sollten die länger sein, poste sie am besten auf paste.pocoo.org.

Ha, grad in der Doku gefunden:
Start by recording
In almost every case, it is simplest to start by recording a script that does some or all of
what you want. You can be sure that PSP will record a command using the proper syntax
and will properly specify all members of the parameter repository.
Even when working on an existing script you should make things easier for yourself – as
you need to add a command to an existing script, just record something close to what you
want and cut and paste the App.Do calls into your script.
Ich scheine also mit meiner Vermutung richtig zu liegen... also scheint es für Dich doch eine Möglichkeit zu geben, ohne Python wirklich verstehen zu müssen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Hallo Hyperion,

Das Zitat gibt ja zur Hoffnung Anlaß.

die Skripte habe ich nach paste.pocoo.org übertragen.

Python zu lernen, bringt mir ja wohl auch nichts, da die Skriptsprache in PSP zwar auf Python aufbaut,
aber wohl doch etwas Eigenes ist, für das ich noch immer keine Doku gefunden habe.

Danke für Deinen Einsatz!
Gruß
Hajo
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo,

wenn wir den gepasteten Code lesen können sollen, dann solltest du natürlich auch noch die dazugehörigen Links in deinen Post einfügen ;-)
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

hajo hat geschrieben: Python zu lernen, bringt mir ja wohl auch nichts, da die Skriptsprache in PSP zwar auf Python aufbaut,
aber wohl doch etwas Eigenes ist, für das ich noch immer keine Doku gefunden habe.
Nuja, ich habe ja Links zu Doku gepostet. Ob das nun die exakte Version ist, weiß ich nicht. Andererseits sehen die Konstrukte ja sehr ähnlich aus. Die API ist halt recht häßlich und wenig Pythonisch. Dennoch kann man für das ein oder andere eben doch auch Python gut gebrauchen. In der Doku zeigen sie bspw. Batch-Verarbeitung, bei denen das glob-Modul von Python benutzt wird.

Wie EyDu schon schrieb, brauchen wir aber die Links auf den Code ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Hallo,
ich habe mich schon gewundert, wie der Code gefunden wird.
Da ich das erste Mal etwas auf paste.pocoo.org eingetragen habe,
seht mir das bitte nach.
So richtig? http://paste.pocoo.org/show/386370/
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ok, packe alles ab Zeile 141 einfach in die Zeile 51 (Ich nehme an, das "flip" soll weg, also das quasi löschen bzw. überschreiben). Das sollte es schon sein.

Generell: Bilder verkleinern im Batch.Modus können viele andere kleinere Bildbearbeitungstools auch. IrfanView hat iirc einen Batchmodus. Ich würde sogar das "convert"-Tool aus dem ImageMagick Paket dazu verwenden. Dazu braucht man jedenfalls kein PSPX ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Hallo Hyperion,

Dein Hinweis bezüglich des Einbettens des Codes funktioniert!! Ich habe ihn wiederhochgeladen: http://paste.pocoo.org/show/386758/

Nachteil: Nach jedem Print 'ProcessingFile' erscheint das Menü 'Grösse ändern', das jeweils mit 'OK' zu bestätigen ist.
Das muss noch weg. Mal sehen, ob ich das hinbekomme.

Den Hinweis auf die anderen Programme werde ich aufnehmen, wenn das Menü 'Grösse ändern' nicht wegzubekommen ist, da ich natürlich gern in meinem gewohnten PSP bleiben möchte.

Danke und Gruß
Hajo
Antworten