Maison  >  Article  >  développement back-end  >  Comment puis-je obtenir l’entrée lors de la sortie ?

Comment puis-je obtenir l’entrée lors de la sortie ?

WBOY
WBOYavant
2024-02-09 12:30:19631parcourir

Comment puis-je obtenir l’entrée lors de la sortie ?

Éditeur PHP Apple vous présentera aujourd'hui une question courante : en PHP, lorsque nous avons besoin d'obtenir une entrée de l'utilisateur, comment devons-nous la générer ? L'obtention des commentaires de l'utilisateur est une partie importante de l'écriture de programmes interactifs, il est donc important de maîtriser la bonne méthode. En PHP, nous pouvons utiliser certaines fonctions intégrées pour obtenir les entrées de l'utilisateur, comme utiliser la fonction `fgets()` pour lire une ligne d'entrée utilisateur à partir de l'entrée standard, ou utiliser la fonction `fgetc()` pour lire depuis l'entrée standard Prendre un caractère. Bien entendu, nous pouvons également utiliser les variables superglobales `$_GET` ou `$_POST` pour obtenir les données soumises par l'utilisateur via le formulaire. Quelle que soit la méthode utilisée, vous devez faire attention à la validation et au filtrage nécessaires des entrées utilisateur pour garantir la sécurité et la stabilité du programme. J'espère que l'introduction ci-dessus pourra aider tout le monde !

Contenu de la question

Ce que je souhaite implémenter, c'est une sorte d'application qui enregistre beaucoup d'informations sur la console (par exemple, un nombre de 0 à 1000000000000) et est capable d'arrêter l'exécution en tapant une commande dans la console (par exemple "arrêter").

J'ai eu l'idée d'utiliser goroutine, cependant, je ne peux pas saisir la commande car le champ de saisie passe en sortie.

Voici mon 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()
}

Et les résultats que j'ai obtenus. Les lettres sont l'entrée que j'essaie de saisir et les chiffres sont la sortie de l'application

Des suggestions sur la façon d'effectuer des entrées/sorties appropriées dans mon application go ?

Solution

Je ne peux pas saisir la commande car le champ de saisie passe à la sortie

Vous pouvez saisir des commandes normalement. Au fur et à mesure que vous les tapez, ils sont répercutés sur votre console. Ceci sera combiné avec tout le reste envoyé à la console, ce qui peut dérouter l'utilisateur - mais pas l'ordinateur.

En supposant que cela correspond réellement à votre système d'exploitation, votre programme fonctionne très bien :

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

Pas sur mon système d'exploitation r。更便携的方法是使用 strings.trimspace Supprimez tous les espaces.

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

Avec ce changement, le code fonctionne pour moi. Comme vous l'avez dit, la sortie et l'entrée sont insérées dans l'écran, mais vous pouvez toujours taper stop et terminer le programme.

Des suggestions sur la façon d'effectuer des entrées/sorties appropriées dans mon application go ?

Presque aucun programme de terminal dans le monde réel n'est interactif. Au lieu de cela, les arguments de ligne de commande et les variables d'environnement fournissent sa configuration lorsqu'ils sont appelés. La redirection Shell est généralement utilisée pour conserver (dans un fichier) ou une page (par exemple |less) toute sortie longue d'un programme.

Vous voyez beaucoup de programmes académiques utilisant le modèle de terminal interactif, où le programme invite l'utilisateur et collecte des données, mais dans le monde réel, cela est très rare et constitue généralement une complication imprudente. L'entrée standard est généralement utilisée pour fournir l'entrée de données requise pour les calculs, plutôt que des commandes utilisateur (telles que des données à manipuler ou à filtrer).

Comme @tinkerer l'a suggéré, les signaux peuvent déjà être utilisés pour terminer votre programme (les détails sont spécifiques au système d'exploitation). Il n'y a donc vraiment pas lieu de s'inquiéter de la façon dont l'application du terminal gère la représentation visuelle des entrées et sorties standard, qui sont interpolées uniquement pour terminer le programme. Il existe de nombreux autres signaux dans l'environnement posix, dont certains sont entièrement destinés à l'utilisateur et peuvent être utilisés à n'importe quelle fin.

Une fois que le runtime nécessite une entrée utilisateur plus complexe, les programmes écoutent généralement les commandes sur un socket. Pour de tels programmes, les interfaces Web fournissant des services http sont de plus en plus courantes en raison de leur simplicité et de leur accessibilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer