Reading from linux command line with Python

前端 未结 3 1098
误落风尘
误落风尘 2021-01-16 09:52

Is there a way to read data that is coming into the command-line, straight into another Python script for execution?

相关标签:
3条回答
  • 2021-01-16 10:13

    use pipes

    x = input()
    

    does the magic

    0 讨论(0)
  • 2021-01-16 10:22

    Here is an example for future reference and also help others.
    Tested with Python 2.6, 2.7, 3.6

    # coding=utf-8
    """
    Read output from command line passed through a linux pipe
    $ vmstat 1 | python read_cmd_output.py 10 3 10
    This will warn when the column value breached the threshold for N time consecutively
    """
    
    import sys
    import re
    
    def main():
        """ Main """
        values = []
        try:
            column, occurrence, threshold = sys.argv[1:]
            column = int(column)
            occurrence = int(occurrence)
            threshold = int(threshold)
        except ValueError:
            print('Usage: {0} <column> <occurrence> <threshold>'.format(sys.argv[0]))
            sys.exit(1)
    
        with sys.stdin:
            for line in iter(sys.stdin.readline, b''):
                line = line.strip()
                if re.match(r'\d', line):
                    elems = re.split(r'\s+', line)
                    values.append(elems[column-1])
                    len(values) > occurrence and values.pop(0)
                    nb_greater = len([x for x in values if int(x) > threshold])
                    print(values, nb_greater, 'Warn' if nb_greater >= len(values) else '')
    
    if __name__ == '__main__':
        try:
            main()
        except KeyboardInterrupt:
            print("\nUser interrupted the script")
            sys.exit(1)
    
    0 讨论(0)
  • 2021-01-16 10:29

    You need to read stdin from the python script.

    import sys
    
    data = sys.stdin.read()
    print 'Data from stdin -', data
    

    Sample run -

    $ date | python test.py
    Data from stdin - Wed Jun 17 11:59:43 PDT 2015
    
    0 讨论(0)
提交回复
热议问题