LINUX.ORG.RU

pass var from bash env to python

 , ,


0

1

Есть файл с локальными настройками (логины, пароли, адрес базы данных). Пишу как обычно в файл:

export db_uri='sqlite:///some.db'
export login='admin'
export passwd='pa$$w0rd'
в скрипте питона пишу:
from os import getenv
engine = create_engine(getenv('db_uri'))
файл создаётся со знаком вопроса в конце (some.db?). При удалении баш дописывает some.db^M. Я так понимаю в переменную как-то затесался \n, собственно вопрос, а как передать правильно?

Ответ на: комментарий от Deleted

Неужто баш никак не заставить не писать лишнего в строки?

conformist ★★★
() автор топика

Разобрался. Этот файл был создан в windows и символ был \r. Заново сделал в linux и всё ок.

conformist ★★★
() автор топика
Ответ на: комментарий от conformist

символ был \r

Хм, я попытался воспроизвести твой сценарий, у меня баш ругнулся «$'\r': command not found». У тебя такого не пишет если сделать source <твой файл>? По-моему по этой ошибке легко понять в чём проблема.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Странно, но не писало. Вызов файла был . envvars. Потому уже в ipython3 глянул все переменные environ и увидел везде 'value\r'. Файл был создан в sublime text3 (view → line endings → windows) в winxp и запущен в debian.

P.S. Вот решил воспроизвести:

~/dev $ cat winlike.sh
export a='value'                            
~/dev $ . winlike.sh
~/dev $ ipython3

In [1]: from os import environ
In [2]: environ['a']
Out[2]: 'value\r'

conformist ★★★
() автор топика
Ответ на: комментарий от conformist

Любопытно. Видимо, у нас с тобой разный bash. А можешь расшарить winlike.sh? Хочу убедиться что \r не затесался перед закрывающей кавычкой. Ну или покажи open('winlike.sh', 'br').read() в ipython, если не сложно.

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.