From: esben@geanix.com
To: Kent Gibson <warthog618@gmail.com>
Cc: linux-gpio@vger.kernel.org
Subject: Re: [RFC PATCH] gpioset: only print prompt when stdout is tty
Date: Wed, 24 May 2023 08:30:33 +0200 [thread overview]
Message-ID: <87pm6q9r7a.fsf@geanix.com> (raw)
In-Reply-To: <ZGzdaJ/wBSUDsJdU@sol> (Kent Gibson's message of "Tue, 23 May 2023 23:36:08 +0800")
Kent Gibson <warthog618@gmail.com> writes:
> On Tue, May 23, 2023 at 03:54:41PM +0200, Esben Haabendal wrote:
>> When gpioset interactive mode is used as intended, as a human controlled
>> interface, stdout should be a tty.
>>
>
> Yeah, no, the interactive mode is also intended to be script driven -
> checkout the test suite, gpio-tools-tests.bat, as an example of it being
> driven using a coproc from bash.
>
> Removing the prompt would break the handshaking with the controlling
> script - that is how it determines the slave process is up.
I see. I use a process supervisor, which should ensure that the gpioset
process stays alive. And if a client writes to the fifo while the
process is shortly down, it will pick up the request when it starts up.
A proper gpio daemon would of-course need a request-reply mechanism, so
the requester can know if the request succeeded. But that obviously is
something slightly more involved than removing a single printf() call.
> I'll try running your patch through the test suite tommorrow, but I'm
> pretty sure it will break it - IIRC the code you removed was put there
> precisely to get the test suite to run.
>
> Have you tried running the test suite?
Yes, I have now. And I see that they fail with my RFC PATCH. The use
of coproc is obviously not compatible with it.
But I cannot help feeling that the use of coproc to drive a
command-prompt interface, while well suited for writing a test for such
an prompt based interactive interface, it is not how you would want to
talk with a daemon.
>> By leaving out the prompt when stdout is not a tty, gpioset interactive mode can
>> be used as a really simple deamon for controlling GPIOs by connecting it to a
>> FIFO.
>
> It can do that already - just direct the output to /dev/null.
If I direct the output to /dev/null, I cannot see what good the prompt
does. I am directing the output to a log file, and by sending "get"
commands to gpioset, I end up with a log of the gpio states.
> Which you would need in your case anyway - the prompt isn't the only
> output - try piping a get command to your daemon and see what happens.
I know.
> This works for me as a simple daemon script:
>
> #!/bin/bash
>
> pipe=/tmp/gpiosetd
>
> mkfifo $pipe
>
> trap "rm -f $pipe" EXIT
>
> # as bash will block until something is written to the pipe...
> echo "" > $pipe &
I believe this is not just needed because of bash. If you don't have a
writer on the fifo, the gpioset will end up in a busy loop in readline
until a writer appear, spamming a prompt out on output while eating up
100% cpu.
> gpioset -i GPIO23=0 < $pipe > /dev/null
>
> Does that not work for you?
That is basically what I do. Just output directed to a log file
(actually, a pipe to a process writing to rotated log files) instead of
/dev/null, and then no prompt noise in the log files.
Anyway, what about adding a new CLI option. Either something like '-I'
for no-prompt interactive mode, or '-n' to be used with '-i' for the
same?
This would make all existing usage of gpioset work just as it is now,
but allowing use without a prompt when that is desired?
/Esben
next prev parent reply other threads:[~2023-05-24 6:32 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-23 13:54 [RFC PATCH] gpioset: only print prompt when stdout is tty Esben Haabendal
2023-05-23 15:36 ` Kent Gibson
2023-05-24 6:30 ` esben [this message]
2023-05-24 7:32 ` Kent Gibson
2023-05-24 7:53 ` esben
2023-05-24 8:12 ` Kent Gibson
2023-05-24 8:35 ` esben
2023-05-24 8:50 ` Kent Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87pm6q9r7a.fsf@geanix.com \
--to=esben@geanix.com \
--cc=linux-gpio@vger.kernel.org \
--cc=warthog618@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.