我已經設定了用于訪問 MongoDB 資料庫的環境變數。除了非常長的 MongoDB 連接字串外,所有的都有效。
Mongodb 字串可以以不同的格式提供,
mongodb://myDBReader:D1fficultP@[email protected]:27017/?authSource=admin
其他示例在這里 - https://www.fosslinux.com/50317/connection-string-in-mongodb-with-examples.htm
在我的例子中,字串是由資料庫管理員提供的,所以我按提供的方式使用它。所有環境變數都顯示在.bashrc檔案中,除了 MONGODB 連接字串。如果我使用我的 python 腳本中的字串,它運行良好,但是當我通過環境變數(.bashrc 檔案)呼叫它時,某些東西會改變字串。
在 .bashrc 上設定
export MGDB_CON_STRING="mongodb://myMGDB:someuname....................server/dbname?authSource=$external&authMechanism=PLAIN....."
當這個變數被 python 腳本呼叫時
mgdb_con_str = os.environ["MGDB_CON_STRING"]
$external&確切地說,有些東西正在吃掉這個字串中的文本)并將其回傳為
"mongodb://myMGDB:someuname....................server/dbname?authSource=authMechanism=PLAIN....."
但是,如果我通過在 python 腳本中使用它再次覆寫這個變數,它就可以作業
mgdb_con_str = r"mongodb://myMGDB:someuname....................server/dbname?authSource=$external&authMechanism=PLAIN....." - 所以這有效
有東西$external&在字串中吃掉它,我找不到到底是什么導致了這個。我也無法在堆疊或一般谷歌搜索的其他地方找到與此問題相關的任何問題。但是,所有其他環境變數的字串值都不會改變。而且,如果我通過組態檔讀取 mongodb 字串,也會出現類似的問題。
uj5u.com熱心網友回復:
處理這種情況的另一種方法是在準備環境變數時使用單引號,它適用于 bash 和 csh 腳本。
而不是這個
export MGDB_CON_STRING="mongodb://myMGDB:someuname....................server/dbname?authSource=$external&authMechanism=PLAIN....."
做這個
export MGDB_CON_STRING='mongodb://myMGDB:someuname....................server/dbname?authSource=$external&authMechanism=PLAIN.....'
當這個變數被 python 腳本呼叫時
mgdb_con_str = os.environ["MGDB_CON_STRING"]
print(mgdb_con_str)
# returns the raw string
'mongodb://myMGDB:someuname....................server/dbname?authSource=$external&authMechanism=PLAIN.....'
uj5u.com熱心網友回復:
這與 Python 無關,只與 linux 如何處理 env 變數有關。
當你在做
export A="...authSource=$external&something_else"
$external被解釋為環境變數$external。由于它不存在,它被替換為一個空字串:
bash-4.2$ export A="...authSource=$external&something_else"
bash-4.2$ echo $A
...authSource=&something_else
您的 env 變數值中需要一個實際$值,因此您需要使用以下命令對其進行轉義\:
bash-4.2$ export A="...authSource=\$external&something_else"
bash-4.2$ echo $A
...authSource=$external&something_else
當然,mgdb_con_str = r"mongodb://myMGDB:someuname....................server/dbname?authSource=$external&authMechanism=PLAIN....."直接在 Python 腳本中賦值是可行的,因為它不會嘗試評估環境變數,$external而只是文字字串$external。
實際例子:
bash-4.2$ export NO_ESCAPED="aa$aa&g"
bash-4.2$ export ESCAPED="aa\$aa&g"
bash-4.2$ echo $NO_ESCAPED
aa&g
bash-4.2$ echo $ESCAPED
aa$aa&g
bash-4.2$ python
>>> import os
>>> os.getenv('NO_ESCAPED')
'aa&g'
>>> os.getenv('ESCAPED')
'aa$aa&g'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533768.html
上一篇:在C中管理行程
