#python #bash
#python #bash
Вопрос:
Я пытаюсь запустить команду docker через скрипт bash, но я не могу правильно передать аргументы.
По сценарию bash выполняется:
#!/bin/bash
start=$(date -d '13 hours ago' ' %Y-%m-%d %H')
end=$(date -d '12 hours ago' ' %Y-%m-%d %H')
docker run --rm -v /home/basic/buffer/:/home psycopg2 /bin/sh -c 'python /home/config.py ${start} ${end} ' > /home/basic/result
и мой скрипт на python (config.py ):
import psycopg2
import datetime
import sys
start = "%s" % (sys.argv[1])
end = "%s" % (sys.argv[2])
print("start:",start)
print("end:",end)
Но он печатает пустые строки.
Есть идеи?
Комментарии:
1. Изменить ‘python /home/config.py ‘ «${start}» «${end}» > /home/basic/результат в «python /home/config.py ‘$start’ ‘$end'» > /home/basic/результат»
Ответ №1:
Вам не нужна дополнительная оболочка; просто укажите расширения параметров, чтобы docker run
получить правильные аргументы; они будут переданы непосредственно в Python, не подвергаясь какой-либо дальнейшей обработке оболочки. в стороне контейнера.
#!/bin/bash
start=$(date -d '13 hours ago' ' %Y-%m-%d %H')
end=$(date -d '12 hours ago' ' %Y-%m-%d %H')
docker run --rm -v /home/basic/buffer/:/home psycopg2
python /home/config.py "${start}" "${end}" > /home/basic/result
Краткий пример:
% docker run --rm bash /usr/bin/printf '%sn' "a b" "c d"
a b
c d
printf
получает три аргумента, а не пять. Внутри контейнера нет команды, подобной printf %sn a b c d
той, которая создается.
Комментарии:
1. Я не получаю ошибку при таком подходе, но перенаправление, похоже, не работает, поскольку
/home/basic/result
это пустой файл — @chepner