Detect input coming from terminal

9:02:00 PM 0 Comments


[edit] C

Use isatty() on file descriptor to determine if it's a TTY. To get the file descriptor from a FILE* pointer, use fileno:
#include  //for isatty()
#include  //for fileno()
 
int main(void)
{
 puts(isatty(fileno(stdin))
  ? "stdin is tty"
  : "stdin is not tty");
 return 0;
}
Output:
$ ./a.out
stdin is tty
$ ./a.out < /dev/zero
stdin is not tty
$ echo "" | ./a.out
stdin is not tty

[edit] D

import std.stdio;
 
extern(C) int isatty(int);
 
void main() {
    if (isatty(0))
        writeln("Input comes from tty.");
    else
        writeln("Input doesn't come from tty.");
}
Output:
C:\test
Input comes from tty.
C:\test < in.txt
Input doesn't come from tty.

[edit] Perl

use strict;
use warnings;
use 5.010;
if (-t) {
    say "Input comes from tty.";
}
else {
    say "Input doesn't come from tty.";
}
$ perl istty.pl
Input comes from tty.
$ true | perl istty.pl
Input doesn't come from tty.

[edit] Perl 6

say $*IN.t ?? "Input comes from tty." !! "Input doesn't come from tty.";
$ perl6 istty.p6
Input comes from tty.
$ true | perl6 istty.p6
Input doesn't come from tty.

[edit] Python

from sys import stdin
if stdin.isatty():
    print("Input comes from tty.")
else:
    print("Input doesn't come from tty.")
$ python istty.pl
Input comes from tty.
$ true | python istty.pl
Input doesn't come from tty.

[edit] REXX

/*REXX program determines if input comes from terminal or standard input*/
 
if queued()  then say 'input comes from the terminal.'
             else say 'input comes from the (stacked) terminal queue.'
 
                                       /*stick a fork in it, we're done.*/
 

[edit] Tcl

Tcl automatically detects whether stdin is coming from a terminal (or a socket) and sets up the channel to have the correct type. One of the configuration options of a terminal channel is -mode (used to configure baud rates on a real serial terminal) so we simply detect whether the option is present.
if {[catch {fconfigure stdin -mode}]} {
    puts "Input doesn't come from tty."
} else {
    puts "Input comes from tty."
}
Demonstrating:
$ tclsh8.5 istty.tcl 
Input comes from tty.
$ tclsh8.5 istty.tcl 

Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.