it-swarm.com.ru

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

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

python python_script.py

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

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

58
Jimmy

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

> 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
82
duckman_1991

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

python python_script.py filename

и в вашем Python скрипте

import sys
print sys.argv[1]
19
NPE

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

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

15
miku

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

Оберните код 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
user77115

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

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

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

1
Dave Thebuskeruk

используйте в скрипте:

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

или же

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

Скрипт будет выполнен без вывода.

0
burseaner