Наверняка вы замечали, что в Python есть удобная функция для получения переменной окружения
os.getenv(NAME)
И её "сестра" для создания или изменения переменных окружения
os.putenv(NAME, VALUE)
Но почему-то putenv() не работает как должно. Энвайромент не обновляется!
os.putenv('MYVAR', '1')
print(os.getenv('MYVAR'))
... и ничего 😴
Почему так?
На самом деле энвайромент обновляется, но это значение не добавляется в словарь os.environ.
Откройте исходник функции os.getenv(). Это просто шорткат для os.environ.get()
В то время как putenv() это built-in С-функция.
Словарь os.environ (или точней класс из MutableMapping) создаётся из энвайромента в момент инициализации. Функция putenv() самостоятельно его не изменяет.
В тоже время, когда вы создаёте или изменяете ключ в os.environ, автоматически вызывается putenv() в методе __setitem__().
То есть, технически putenv() всё делает верно, но в os.environ это не отражается. Можно проверить так:
>>> os.putenv('MYVAR', '123')
>>> os.system('python -c "import os;print(os.getenv(\'MYVAR\'))"')
123
Я объявил переменную в текущем процессе и вызвал дочерний процесс, который её унаследовал и получил в составе os.environ.
Аналогично при удалении переменной вызывается еще одна built-in функция unsetenv(), удаляющая переменную из системы.
Итого
▫️ Удобней всего явно обновлять переменные через os.environ
▫️ Есть способ неявно создать/удалить переменную через putenv/unsetenv, что не повлияет на os.environ но изменит энвайромент и передаст изменения сабпроцессам. Но так лучше не делать!
▫️os.environ это просто обертка для built-in функций putenv() и unsetenv().
#basic
😄Thought
➖➖➖➖➖➖
🔘As a verb thought is the past tense of 'think':
🔜I thought about the problem for a little while.
🔘 an idea or plan.
🔜I've had a thought about what we should do next.
As a plural noun, thoughts can be:
🔘our opinions or beliefs.
🔜What are your thoughts on the best way to learn English?
As an uncountable noun, thought can mean:
🔘‘careful consideration’.
🔜We need to give more thought to this project.
#Thought👨🏫@America
➖➖➖➖➖➖➖➖➖➖➖➖
🆕 Crypto News @Money
😁 Crypto Game @Egame
🇺🇸 US News @America
🇯🇵 Japan News @Japan
🇦🇪 UAE News @Dubai
▶️ Popular Movies @Videos
😜 Best Funny Video @Funnys
前些日子在網上衝浪(不知道現在還有沒有人在用 surfing the Internet / surf on the Internet 這樣的說法)時,發現了 NirSoft 這個由開發人員 Nir Sofer 所創建的個人網站。
根據他在關於頁面的說法,這個網站最初建立於 2001 年,用來陳列自己開發的小工具;起初託管在一些免費服務上,後來隨著廣告與惡意使用者逐漸增多,在 2004 年購買了自己的網域。
裡面有許許多多採用 C++ 開發的 Windows 實用小程式,並且據作者所說,這些程式具備可攜性(portable),大多情況下不需要安裝且不會存取註冊表;裡面 Network Monitoring, Internet Related Utilities, Command-Line Utilities, Programmer Tools 和 System Utilities 的部分可以尋尋寶。
作者還有維護一個部落格,目前最新的一篇文章是 2023/08/19 發佈的;長年來都在業餘時間開發小工具,還能樂此不疲且碼耕不輟,這應該是許多開發者想活成的樣子了。
#Thought
在 Do You Want To Be a News Source? Just Change Your Account Name 一文中,提到了過去幾年在 Twitter 上出現的幾個虛假新聞帳號案例,這類帳號通常是由既有的帳號修改使用者名稱(username)以及帳號名稱,而非創建新的使用者,這樣的操作手法需要透過永久 UID 來辨認(可以透過 TwitterID 這個工具查詢與反查)。
__
這個電子報還有其他不錯的文章,比如 How to Find Swarms of Fake Twitter Followers 一文,表示這類假帳號通常具備兩個特徵:
1. 短時間內獲得數百或數千名的假帳號關注
2. 假帳號通常會在固定的時間或時間範圍內創建帳號
文中有提供一段簡單的 Python 程式來辨別上述的特徵,但需要具備 Twitter 開發者帳號並啟用 API 來操作,這在馬總搞了一堆奇妙的操作後,可能得另謀他法了…
#Thought