Подтвердить что ты не робот

Вызовите Python script из bash с аргументом

Я знаю, что я могу запустить python script из моего bash script, используя следующее:

python python_script.py

Но как насчет того, хотел ли я передать переменную/аргумент на мой python script из моего bash script. Как я могу это сделать?

В принципе bash будет работать с именем файла, а затем питон загрузит его, но мне нужно отправить имя файла из bash в python, когда я его назову.

4b9b3361

Ответ 1

Чтобы выполнить python script в bash script, вам нужно вызвать ту же команду, что и в терминале. Например,

> python python_script.py var1 var2

Для доступа к этим переменным в python вам понадобится

import sys
print sys.argv[0] # prints python_script.py
print sys.argv[1] # prints var1
print sys.argv[2] # prints var2

Ответ 2

Использование

python python_script.py filename

и в вашем Python script

import sys
print sys.argv[1]

Ответ 3

Рядом с sys.argv, также взгляните на argparse, который помогает определять параметры и аргументы для скриптов.

Модуль argparse упрощает создание удобных для пользователя интерфейсов командной строки.

Ответ 4

Встроенный вариант:

Обернуть код Python в функцию bash.

#!/bin/bash

function current_datetime {
python - <<END
import datetime
print datetime.datetime.now()
END
}

# Call it
current_datetime

# Call it and capture the output
DT=$(current_datetime)
echo Current date and time: $DT

Используйте переменные окружения, чтобы передавать данные в ваш встроенный скрипт Python.

#!/bin/bash

function line {
PYTHON_ARG="$1" python - <<END
import os
line_len = int(os.environ['PYTHON_ARG'])
print '-' * line_len
END
}

# Do it one way
line 80

# Do it another way
echo $(line 80)

http://bhfsteve.blogspot.se/2014/07/embedding-python-in-bash-scripts.html

Ответ 5

У меня есть bash script, который вызывает небольшую подпрограмму python для отображения окна сообщения. Поскольку мне нужно использовать killall для остановки python script, я не могу использовать вышеописанный метод, поскольку тогда это означало бы запустить killall python, который мог бы вытащить другие программы python, поэтому я использую

pythonprog.py "$argument" & # Элемент управления и возвращается прямо к bash script, поэтому он должен находиться за пределами обратных циклов. Предварительный просмотр этого сообщения показывает его без "`" по какой-либо стороне команды по какой-либо причине.

Пока python script будет запущен из cli по имени, а не python pythonprog.py, это работает в script. Если вам нужно больше одного аргумента, просто используйте пробел между каждым в кавычках.

Ответ 6

используйте script:

echo $(python python_script.py arg1 arg2) > /dev/null

или

python python_script.py "string arg"  > /dev/null

script будет выполнен без вывода.

Ответ 7

и взгляните на модуль getopt. Это работает неплохо для меня!