Re: [RFC PATCH] gpioset: only print prompt when stdout is tty

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

 



Kent Gibson <warthog618@xxxxxxxxx> 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



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux