Press ENTER to continue…

Als j al lang genoeg met computers werkt ken je vast de tekst “Press any key to continue . . .” wel.

Met natuurlijk ook de typische “Waar zit de ANY key?” vragen van gebruikers.

Tegenwoordig zul je het niet zo vaak meer zien, ook omdat we gewoon niet zo veel meer op dergelijke terminal prompts werken. Zelf gebruik ik het toch nog wel met enige regelmaat in scripts die logischer zijn in een Terminal.

Even wachten…

Soms zijn er dingen die je 99% kunt automatiseren, maar ergens halverwege het proces moet je net even iets handmatigs doen.

Bijvoorbeeld gegevens ophalen uit een systeem wat geen API biedt. Dan is scraping niet altijd de moeite, en kan het soms prima zijn om te zeggen “Druk op ENTER als je zo ver bent”.1

Uiteindelijk gebruik ik twee versies: soms wil je echt iets specifieks van de gebruiker, bijvoorbeeld een bevestiging voor je alles verwijdert. Dan wil je dat ze een specifieke tekst typen, of in ieder geval een “Y”.

En soms is het gewoon een “Druk op enter om door te gaan”.

Omdat ik veel van dit soort scripts schrijf in PHP en Python, heb ik ook twee implementaties van hetzelfde.

De functies accepteren twee argumenten: de tekst die weergegeven wordt, en welke tekst ingevoerd moet worden.

Beide zijn optioneel, en als er niets ingegeven wordt gaan we uit van “Press any key to continue . . .”.

PHP-implementatie

In PHP ziet het er zo uit:

function continueAfterConfirmation(string $display_text = null, string $required_input = null): bool
{
	if($display_text === null)
	{
		if($required_input === null)
		{
			$display_text = sprintf("Press any key to continue . . .");
		}
		elseif(strlen($required_input) === 1)
		{
			$display_text = sprintf("Press %s to continue . . .", $required_input);
		}
		else
		{
			$display_text = sprintf("Type '%s' to continue . . .", $required_input);
		}
	}

	$input_read_from_user = trim(readline($display_text . "\n"));

	if($required_input === null)
	{
		return true;
	}

	return ($required_input === $input_read_from_user);
}

Python-implementatie

En in Python werkt het zo, met een nadeel dat de gebruiker altijd op Enter moet drukken.

Daarom vragen we daar standaard niet om de “any”-key, maar om Enter.

Het nadeel zit ’m er vooral in wanneer we een enkel karakter vragen (bijvoorbeeld “y”), omdat het dus Y[enter] moet zijn.

Het alternatief is terug te vallen op externe packages als readchar, wat ik (nog) niet gedaan heb.

def continue_after_confirmation(display_text=None, required_input=None):
    if display_text is None:
        if required_input is None:
            display_text = "Press ENTER to continue . . ."
        else:
            display_format = "Press {} to continue . . ." if len(required_input) == 1 else "Type '{}' to continue . . ."
            display_text = display_format.format(required_input)

    input_read_from_user = input(display_text + "\n").strip()

    return True if required_input is None else required_input == input_read_from_user

Voorbeeld

In gebruik ziet het er bijvoorbeeld zo uit:

printf("Hello world\n");
if(continueAfterConfirmation('Typ yes om door te gaan', 'Yes'))
{
	printf("Goed gedaan!\n");
}
else
{
	printf("Aborting…\n");
}

  1. Of je kunt natuurlijk monitoren of het ding waar je op wacht gebeurd is, maar ook dat is niet altijd de moeite. ↩︎