Re: [Gimp-developer] Accessing stdin from a Python based GIMP Plugin.



On Thu, Sep 5, 2019 at 6:38 AM Ofnuts <ofnuts gmx com> wrote:

On 9/4/19 6:48 AM, Craig Sanders via gimp-developer-list wrote:
Hello all.

Are there any gotchas that one should be aware of when accessing stdin
from
a Python based GIMP Plugin?

The reason I ask, is because I am implementing a Plugin which seems to be
working fine - until such time as I insert the following code into it;



     for line in stdin :


Works fine for me on Linux (assuming you mean 'sys.stdin' and not
'stdin'). This is of course the very stdin stream of the Gimp process.
Just tested with file, pipe, and terminal and all three work.

Can't say the same for Windows, the standard streams for windowed
applications do not have a regular behavior (for instance IIRC you will
hang your plugin if you print more than 8K to sys.stdout).


Not sure it is a good idea anyway to use stdin, you have to restart Gimp
if you want a second run. Why not use a plain file?



_______________________________________________
gimp-developer-list mailing list
List address:    gimp-developer-list gnome org
List membership:
https://mail.gnome.org/mailman/listinfo/gimp-developer-list
List archives:   https://mail.gnome.org/archives/gimp-developer-list


Hello, and thank you very much for your reply to my question - it is
greatly appreciated.

I must say however, that it looks as though you have responded to a draft
copy of the e-mail that I must have sent by accident. Sorry about that - I
don't know how I managed to do it!

The e-mail I meant to send is below.

BEGIN INTENDED EMAIL >>>>>

Hello all.

Are there any gotchas that one should be aware of when accessing stdin from
a Python based GIMP Plugin?

The reason I ask, is because I am implementing a Plugin which seems to be
working fine - until such time as I insert the following code into it;

    # Code omitted

    # The sys module is imported at the top of the file.

    list_filenames = ""

    for line in sys.stdin :

        list_filenames = list_filenames + ";" + line

    # Code omitted

If I didn't know better, I'd say the line of code in which the for loop
attempts to read from sys.stdin is causing the problem.

When I run the Plugin - with the above code, from the command line, I get
the following error;

    batch command experienced an execution error:
    Error: ( : 1) eval: unbound variable:
python-fu-runPlugin-multiple-fromList

where runPlugin_multiple_fromList is the name of the Python function which
implements my Plugin.

Now, if I comment out the for loop, then the Plugin works!

I am invoking the following command from the command line (within Linux) in
order to run the Plugin.

    find \
    /home/foo/foreground_images/ \
    -maxdepth 1 \
    -name "*.png" \
    | \
    gimp \
    --no-interface \
    --verbose \
    --console-messages \
    --batch-interpreter="plug-in-script-fu-eval" \
    --batch \
    '( \
    python-fu-runPlugin-multiple-fromList \
    RUN-NONINTERACTIVE \
    "/home/foo/background_images/bg_image.png" \
    "0" \
    "" \
    "/home/foo/images_output/" \
    "0" \
    "result" \
    "0" \
    )' \
    --batch "(gimp-quit 0)"

I'm actually running the command on one line. I have only broken it up
across multiple lines above, to assist with readability.

What I'd ideally like this Plugin to do, is operate on all of the files
which are passed to it via stdin. The find utility is only used above to
help demonstrate the concept. In reality, I will be using another
customised utility which will write the list the files of interest out to
stdout.

Thanks in advance for any assistance.

<<<<< END INTENDED EMAIL <<<<<

I just thought I'd ask the question in case GIMP commandeers stdin and/or
stdout, or does something else that I might not have thought of! I didn't
think GIMP did commandeer stdin and stdout, but I thought I'd ask more
enlightened minds that mine just to be sure. The reason I say this, is
because I wrote a small GIMP Test Plugin which read from stdin, and it
seemed to work okay.

On one other matter, you don't seem to approve of the fact that my Plugin
reads from stdin. Hopefully, my intended email above helps to show you how
I am trying to use it. I also have a variant of my Plugin which does read a
list of image filenames from a file, however the variant which reads the
list of image filenames from stdin seems - at least to me anyway, to be
more in keeping with the Unix programming philosophy. From memory, I think
Eric Raymond might have even talked about programming in this manner is his
book "The Art of Unix Programming.".

Thanks once again for all of your time and assistance. It is appreciated
immensely.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]