Вызовите Python script из bash с аргументом
Я знаю, что я могу запустить python script из моего bash script, используя следующее:
python python_script.py
Но как насчет того, хотел ли я передать переменную/аргумент на мой python script из моего bash script. Как я могу это сделать?
В принципе bash будет работать с именем файла, а затем питон загрузит его, но мне нужно отправить имя файла из bash в python, когда я его назову.
Ответы
Ответ 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.
Это работает неплохо для меня!