Read from command line linux

Reading from linux command line with Python [duplicate]

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

3 Answers 3

You need to read stdin from the python script.

import sys data = sys.stdin.read() print 'Data from stdin -', data 
$ date | python test.py Data from stdin - Wed Jun 17 11:59:43 PDT 2015 

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:   '.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) 

Источник

Команда read в Bash

Bash поставляется с рядом встроенных команд, которые можно использовать в командной строке или в сценариях оболочки.

В этой статье мы рассмотрим встроенную команду read .

Встроенное read Bash

read — это встроенная команда bash, которая считывает строку из стандартного ввода (или из файлового дескриптора) и разбивает строку на слова. Первое слово присваивается первому имени, второе — второму имени и так далее.

Общий синтаксис встроенной функции read имеет следующий вид:

Чтобы проиллюстрировать, как работает команда, откройте терминал, введите read var1 var2 и нажмите «Enter». Команда будет ждать, пока пользователь введет данные. Введите два слова и нажмите «Enter».

read var1 var2Hello, World!

Слова присваиваются именам, которые передаются команде read качестве аргументов. Используйте echo или printf чтобы проверить это:

Вместо того, чтобы вводить текст на терминале, вы можете передать стандартный ввод для read с помощью других методов, таких как piping, here-string или heredoc :

echo "Hello, World!" | (read var1 var2; echo -e "$var1 n$var2")

Вот пример использования строки здесь и printf :

read -r var1 var2 printf "var1: %s nvar2: %sn" "$var1" "$var2"

Если команде read не задан аргумент, вся строка присваивается переменной REPLY :

echo "Hello, world!" | (read; echo "$REPLY")

Если количество аргументов, предоставленных для read , больше, чем количество слов, прочитанных из ввода, оставшиеся слова присваиваются фамилии:

echo "Linux is awesome." | (read var1 var2; echo -e "Var1: $var1 nVar2: $var2")
Var1: Linux Var2: is awesome. 

В противном случае, если количество аргументов меньше количества имен, оставшимся именам присваивается пустое значение:

echo "Hello, World!" | (read var1 var2 var3; echo -e "Var1: $var1 nVar2: $var2 nVar3: $var3")
Var1: Hello, Var2: World! Var3: 

По умолчанию read интерпретирует обратную косую черту как escape-символ, что иногда может вызывать неожиданное поведение. Чтобы отключить экранирование обратной косой черты, вызовите команду с параметром -r .

Ниже приведен пример, показывающий, как работает read при вызове с параметром -r и без него:

Как правило, вы всегда должны использовать read с параметром -r .

Изменение разделителя

По умолчанию при read строка разбивается на слова с использованием одного или нескольких пробелов, табуляции и новой строки в качестве разделителей. Чтобы использовать другой символ в качестве разделителя, присвойте его переменной IFS (внутренний разделитель полей).

echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1 n$var2 n$var3")

Когда IFS установлен на символ, отличный от пробела или табуляции, слова разделяются ровно одним символом:

echo "Linux::is:awesome." | (IFS=":" read -r var1 var2 var3 var4; echo -e "Var1: $var1 nVar2: $var2 nVar3: $var3 nVar4: $var4")

Строка разделена четырьмя словами. Второе слово — это пустое значение, представляющее отрезок между разделителями. Он создан, потому что мы использовали два символа-разделителя рядом друг с другом ( :: .

Var1: Linux Var2: Var3: is Var4: awesome. 

Для разделения строки можно использовать несколько разделителей. При указании нескольких разделителей присваивайте символы переменной IFS без пробела между ними.

Вот пример использования _ и - качестве разделителей:

echo 'Linux_is-awesome.' | (IFS="-_" read -r var1 var2 var3; echo -e "$var1 n$var2 n$var3")

Строка подсказки

При написании интерактивных сценариев bash вы можете использовать команду read для получения пользовательского ввода.

Чтобы указать строку приглашения, используйте параметр -p . Подсказка печатается перед выполнением read и не включает новую строку.

Как правило, вы будете использовать для read команды внутри в while цикл , чтобы заставить пользователя дать один из ожидаемых ответов.

Приведенный ниже код предложит пользователю перезагрузить систему :

while true; do read -r -p "Do you wish to reboot the system? (Y/N): " answer case $answer in [Yy]* ) reboot; break;; [Nn]* ) exit;; * ) echo "Please answer Y or N.";; esac done 

Если сценарий оболочки просит пользователей ввести конфиденциальную информацию, например пароль, используйте параметр -s который сообщает read не печатать ввод на терминале:

read -r -s -p "Enter your password: " 

Назначьте слова в массив

Чтобы присвоить слова массиву вместо имен переменных, вызовите команду read с параметром -a :

read -r -a MY_ARR  "Linux is awesome." for i in "$MY_ARR[@]>"; do echo "$i" done 

Когда даны и массив, и имя переменной, все слова присваиваются массиву.

Выводы

Команда read используется для разделения строки ввода на слова.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

5 Practical Examples of the Read Command in Linux

With read command, you can make your bash script interactive by accepting user inputs. Learn to use the read command in Linux with these practical examples.

What is the read command in Linux?

The read command in Linux is a way for the users to interact with input taken from the keyboard, which you might see referred to as stdin (standard input) or other similar descriptions.

In other words, if you want that your bash script takes input from the user, you’ll have to use the read command.

I am going to write some simple bash scripts to show you the practical usage of the read command.

Read command examples

Read Command Linux

The read command can be confusing to get started with, especially for those who are new to shell scripting. The scripts I am going to use here are very simple to understand and should be easy to follow, especially if you are practicing along with the tutorial.

Basic Programming Concepts

With almost every program or script, you want to take information from a user (input) and tell the computer what to do with that information (output).

When you use read, you are communicating to the bash terminal that you want to capture the input from the user. By default, the command will create a variable to save that input to.

read [options] variable_name

Now let’s see some examples of read command to understand how you can use it in different situations.

1. Read command without options

When you type read without any additional options, you will need to hit enter to start the capture. The system will capture input until you hit enter again.

By default this information will be stored in a variable named $REPLY .

To make things easier to follow for the first example, I will use the ↵ symbol will show when the enter key is pressed.

read ↵ hello world ↵ echo $REPLY ↵ hello world

More About Variables

As I mentioned earlier, the $REPLY variable is built into read , so you don’t have to declare it.

That might be fine if you have only one application in mind, but more than likely you’ll want to use your own variables. When you declare the variable with read, you don’t need to do anything other than type the name of the variable.

When you want to call the variable, you will use a $ in front of the name. Here’s an example where I create the variable Linux_Handbook and assign it the value of the input.

You can use echo command to verify that the read command did its magic:

read Linux_Handbook ↵ for easy to follow Linux tutorials. echo $Linux_Handbook ↵ for easy to follow Linux tutorials.

Reminder: Variable names are case-senstive.

2. Prompt option -p

If you’re writing a script and you want to capture user input, there is a read option to create a prompt that can simplify your code. Coding is all about efficiency, right?

Instead of using additional lines and echo commands, you can simply use the -p option flag. The text you type in quotes will display as intended and the user will not need to hit enter to begin capturing input.

So instead of writing two lines of code like this:

echo "What is your desired username? " read username

You can use the -p option with read command like this:

read -p "What is your desired username? " username

The input will be saved to the variable $username.

3. “Secret”/Silent option -s

I wrote a simpe bash script to demonstrate the next flag. First take a look at the output.

bash secret.sh What is your desired username? tuxy_boy Your username will be tuxy_boy. Please enter the password you would like to use: You entered Pass123 for your password. Masking what's entered does not obscure the data in anyway.

Here is the content of secret.sh if you’d like to recreate it.

#!/bin/bash read -p "What is your desired username? " username echo "Your username will be" $username"." read -s -p "Please enter the password you would like to use: " password echo echo "You entered" $password "for your password." echo "Masking what's entered does not obscure the data in anyway."

As you can see, the -s option masked the input when the password was entered. However, this is a superficial technique and doesn’t offer a real security.

4. Using a character limit with read option -n

You can add a constraint to the input and limit it to n number of characters in length.

Let’s use the same script from before but modify it so that inputs are limited to 5 characters.

read -n 5 -p "What is your desired username? " username

Simply add -n N where N is the number of your choice.

I’ve done the same thing for our password.

bash secret.sh What is your desired username? tuxy_Your username will be tuxy_. Please enter the password you would like to use: You entered boy for your password.

As you can see the program stopped collecting input after 5 characters for the username.

However, I could still write LESS than 5 characters as long as I hit ↵ after the input.

If you want to restrict that, you can use -N (instead of -n) This modification makes it so that exactly 5 characters are required, neither less, nor more.

5. Storing information in an array -a

You can also use read command in Linux to create your own arrays. This means we can assign chunks of input to elements in an array. By default, the space key will separate elements.

[email protected]:~$ read -a array abc def 123 x y z [email protected]:~$ echo $ abc def 123 x y z [email protected]:~$ echo $ abc def 123 [email protected]:~$ echo $ abc [email protected]:~$ echo $ z

If you’re new to arrays, or seeing how them in bash for the first time, I’ll break down what’s happening.

  • Enter desired elements, separated by spaces.
  • If we put only the @ variable, it will iterate and print the entire loop.
  • The @ symbol represents the element number and with the colons after, we can tell iterate from index 0 to index 3 (as written here).
  • Prints element at index 0.
  • Similar to above, but demonstrates that the elements are seperated by the space

Bonus Tip: Adding a timeout function

You can also add a timeout to our read. If no input is captured in the allotted time, the program will move on or end.

It may not be obvious looking at the output, but the terminal waited three seconds before timing out and ending the read program.

I hope this tutorial was helpful in getting you started with the read command in Linux. As always, we love to hear from our readers about content they’re interested in. Leave a comment below and share your thoughts with us!

Источник

Читайте также:  Linux which ntp server
Оцените статью
Adblock
detector