Home  >  Article  >  Backend Development  >  How to get input while outputting?

How to get input while outputting?

WBOY
WBOYforward
2024-02-09 12:30:19634browse

How to get input while outputting?

php editor Apple will introduce you to a common question today: In PHP, when we need to obtain user input, how should we output it? Obtaining user input is an important part of writing interactive programs, so it is important to master the correct method. In PHP, we can use some built-in functions to obtain user input, such as using the `fgets()` function to read a line of user input from the standard input, or using the `fgetc()` function to read from the standard input Take a character. Of course, we can also use the `$_GET` or `$_POST` superglobal variables to obtain the data submitted by the user through the form. No matter which method is used, you need to pay attention to the necessary validation and filtering of user input to ensure the security and stability of the program. I hope the above introduction can help everyone!

Question content

What I want to achieve is some kind of application that logs a large amount of information to the console (for example, a number from 0 to 1000000000000) and is able to pass in the console Type a command to stop execution (such as "stop").

I came up with the idea of ​​using goroutine, however, I cannot enter the command because the input field is changing to output.

This is my code:

package main

import (
    "bufio"
    "os"
)

var process bool = true

func commandHandler() {
    reader := bufio.NewReader(os.Stdin)
    for process {
        text, _ := reader.ReadString('\n')
        if text == "stop\r\n" {
            process = false
        }
    }
}

func task() {
    var i int64 = 0
    for ; i < 10000000000 || process; i++ {
        if i%30000000 == 0 { // Just to slow down an output for a while
            println(i)
        }
    }
}

func main() {
    go task()
    commandHandler()
}

and the results I get. The letters are the input I'm trying to enter and the numbers are the output from the application

Any suggestions on how to do proper input/output in my go application?

Workaround

I cannot enter the command because the input field is changing to output

You can enter commands normally. As you type them, they are echoed to your console. This will be combined with everything else output to the console, which may confuse the user - but not the computer.

Assuming this actually matches your operating system, your program runs just fine:

if text == "stop\r\n" {

Not available on my operating system \r. A more portable way is to use strings.trimspace to remove all spaces.

import (
  ...
  "strings"
) 
... 
...
        if strings.TrimSpace(text) == "stop" {

With this change, the code works for me. As you said, the output and input are inserted to the screen, but you can still type stop and end the program.

Any suggestions on how to do proper input/output in my go application?

Almost no terminal programs in the real world are interactive. Instead, command line arguments and environment variables provide its configuration when called. Shell redirection is typically used to preserve (in a file) or page (e.g. |less) any long output from a program.

You'll see a lot of academic programming using the interactive terminal model, where the program prompts the user and collects data, but in the real world this is very rare and often an unwise complication. Standard input is typically used to provide data input required for calculations, rather than user commands (such as data to be manipulated or filtered).

As @tinkerer suggested, signals can already be used to terminate your program (details are operating system specific). So there's really no need to worry about how the terminal application handles the visual representation of standard input and output, which are interpolated just to terminate the program. There are many other signals in the posix environment, some of which are entirely user-facing and can be used for any purpose.

Once the runtime requires more complex user input, the program will typically listen for commands on a socket. For such programs, web interfaces providing http services are becoming more and more common due to simplicity and accessibility.

The above is the detailed content of How to get input while outputting?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete