å šãŠã«ãããŠè¯ãæ¥ã
ä»æ¥ãPython ã¯ãœãããŠã§ã¢è£œåèªäœã®äœæã ãã§ãªãããã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãæäŸããåéã§ãæããã䜿çšãããŠããèšèªã® XNUMX ã€ã§ãã ãã®çµæãå€ãã®éçºè ã¯ãèªãã®æå¿ã§ããããšãããã«åããŠãåŸã§å€ãè¯ã Bash ã¹ã¯ãªããã®è£è¶³ãšããŠäœ¿çšããããã«æ°ããèšèªãåŠç¿ããå¿ èŠããããŸããã ãã ããBash ãš Python ã¯ãã³ãŒããèšè¿°ããã¢ãããŒããç°ãªããç¹å®ã®æ©èœãåããŠãããšå ¬èšããŠããŸããã€ãŸããBash ã¹ã¯ãªããããã¹ããŒã¯èšèªãã«ç§»æ€ããããšã¯ãæã«ã¯å€å€§ãªäœæ¥ã§ããã決ããŠç°¡åãªäœæ¥ã§ã¯ãªãããšãå€æããŸãã
Devops ã®äœæ¥ã容æã«ããããã«ãPython ã§å€ãã®äŸ¿å©ãªã©ã€ãã©ãªãšãŠãŒãã£ãªãã£ãäœæãããä»åŸãäœæããç¶ããŸãã ãã®èšäºã§ã¯ããã®æçš¿ã®èè
ãäœæãã XNUMX ã€ã®æ°ããã©ã€ãã©ãªã«ã€ããŠèª¬æããŸãã
èå³ã®ããæ¹ã¯ãã²ç«ãã芧ãã ããã
æ°ãããèªè»¢è»ãïŒ
ããæ®éã®æäœã®ããã«ãªãæ°ããããã±ãŒãžãäœæããã®ã§ãããã? os.environ ãš subprocess.<éžæããã¡ãœãããŸãã¯ã¯ã©ã¹> ãçŽæ¥äœ¿çšã§ããªãã®ã¯ãªãã§ãã?
ããããã®å³æžé€šã«æå©ãªèšŒæ ãåå¥ã«æäŸããŸãã
ã¹ããŒãç°å¢ã©ã€ãã©ãª
èªåã§çºæ¡ããåã«ããªã³ã©ã€ã³ã«ã¢ã¯ã»ã¹ããŠæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ãæ¢ããšäŸ¿å©ã§ãã ãã¡ãããå¿ èŠãªãã®ãèŠã€ãããªããªã¹ã¯ã¯ãããŸãããããã¯ããããä¿éºãã§ãã ååãšããŠããã®ã¢ãããŒãã¯ããŸãæ©èœããæéãšåŽåãå€§å¹ ã«ç¯çŽã§ããŸãã
çµæã«ãããš
- å®éã« os.environ ãžã®åŒã³åºããã©ããããããã±ãŒãžããããŸãããåæã«å€æ°ã®æ°ãæ£ãã¢ã¯ã·ã§ã³ (ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã®äœæãåŒã³åºãå ã®ç¹å¥ãªãã©ã¡ãŒã¿ãŒãªã©) ãå¿ èŠã§ãã
- åªããããã±ãŒãžããããŸãããç¹å®ã®ãšã³ã·ã¹ãã (䞻㫠Django ãªã©ã® Web ãã¬ãŒã ã¯ãŒã¯) ã«å³å¯ã«é¢é£ä»ããããŠããããããã¡ã€ã«ãªãã§ã¯ãŸã£ããæ±çšæ§ããããŸããã
- äœãæ°ããããšãããããšããè©Šã¿ã¯ãŸãã§ãã äŸãã°ã
ã¿ã€ãã³ã°ãè¿œå ãããŠã次ã®ãããªã¡ãœãããåŒã³åºããŠå€æ°å€ãæ瀺çã«è§£æããŸããget_<typename>(var_name)
ãŸãã¯ãã
ããXNUMXã€ã®è§£æ±ºç ãã ããããã¯ä»ãäžåèªãª Python 2 ããµããŒãããŠããŸãã (å ¬åŒRIP ãæžãããã³ãŒããšãšã³ã·ã¹ãã å šäœããŸã å±±ã®ããã«ãããŸãïŒã - äœããã®çç±ã§äžæµã® PyPI ã«è¡ãçããæ°ããããã±ãŒãžã®åœåã«é¢ããŠã®ã¿åé¡ãåŒãèµ·ããåŠçã®äœåããããŸã (ç¹ã«ããsmart-envããšããååã¯å¿ èŠãªå¯Ÿçã§ã)ã
ãããŠããã®ãªã¹ãã¯é·æéç¶ãå¯èœæ§ããããŸãã ããããäžèšã®ç¹ã¯ãäœã䟿å©ã§æ®éçãªãã®ãäœããšããã¢ã€ãã¢ã«è奮ããã®ã«ååã§ããã
Smart-env ãäœæããåã«èšå®ãããèŠä»¶:
- æãã·ã³ãã«ãªäœ¿çšã¹ããŒã
- ç°¡åã«èšå®å¯èœãªããŒã¿åå ¥åã®ãµããŒã
- Python2.7äºæ
- ãã¹ãã«ããè¯å¥œãªã³ãŒãã«ãã¬ããž
æçµçã«ãããããã¹ãŠãå®çŸããŸããã 以äžã«äœ¿çšäŸã瀺ããŸãã
from smart_env import ENV
print(ENV.HOME) # Equals print(os.environ['HOME'])
# assuming you set env variable MYVAR to "True"
ENV.enable_automatic_type_cast()
my_var = ENV.MY_VAR # Equals boolean True
ENV.NEW_VAR = 100 # Sets a new environment variable
äŸãããããããã«ãæ°ããã¯ã©ã¹ãæäœããã«ã¯ããããã€ã³ããŒãããã ãã§ã (è¿œå ã®ã¢ã¯ã·ã§ã³ãé€ããŠãã€ã³ã¹ã¿ã³ã¹ãäœæããå¿ èŠã¯ãããŸãã)ã ç°å¢å€æ°ãžã®ã¢ã¯ã»ã¹ã¯ãç°å¢å€æ°ã ENV ã¯ã©ã¹ã®å€æ°ãšããŠåç §ããããšã«ãã£ãŠå®çŸãããŸããå®éããã®ã¯ã©ã¹ã¯ãã€ãã£ã ã·ã¹ãã ç°å¢ã®çŽèŠ³çãªã©ãããŒãšãªããåæã«ã»ãŒãã¹ãŠã®ã·ã¹ãã ã§äœ¿çšå¯èœãªæ§æãªããžã§ã¯ãã«ãªããŸã (ããšãã°ãåæ§ã®ã¢ãããŒãã Django ã§å®çŸãããŸãããããã§ã®ã¿æ§æãªããžã§ã¯ããèšå®ã¢ãžã¥ãŒã«/ããã±ãŒãžèªäœã«ãªããŸã)ã
èªåå ¥åãµããŒã ã¢ãŒãã®æå¹å/ç¡å¹åã¯ãenable_automatic_type_cast() ãš disable_automatic_type_cast() ã® XNUMX ã€ã®ã¡ãœããã䜿çšããŠå®çŸãããŸãã ããã¯ãç°å¢å€æ°ã«ã·ãªã¢ã«åããã JSON ã®ãããªãªããžã§ã¯ãããŸãã¯åãªãããŒã«å®æ°ãå«ãŸããŠããå Žåã«äŸ¿å©ã§ã (ç°å¢å€æ°ããæå¹ãªãæååãšæ¯èŒããããšã«ãã£ãŠ Django 㧠DEBUG å€æ°ãæ瀺çã«èšå®ããã®ãæãäžè¬çãªã±ãŒã¹ã® XNUMX ã€ã§ã)ã ããããçŸåšã¯æååãæ瀺çã«å€æããå¿ èŠã¯ãããŸãããå¿ èŠãªã¢ã¯ã·ã§ã³ã®ã»ãšãã©ã¯ãã§ã«ã©ã€ãã©ãªã®å¥¥æ·±ãã«åã蟌ãŸããŠãããã·ã°ãã«ãåäœããã®ãåŸ ã£ãŠããã ãã§ãã ð äžè¬ã«ãå ¥åã¯ééçã«æ©èœããå©çšå¯èœãªã»ãŒãã¹ãŠã®çµã¿èŸŒã¿ããŒã¿åããµããŒãããŸã (frozensetãcomplexãbytes ã¯ãã¹ããããŠããŸãã)ã
Python 2 ããµããŒãããèŠä»¶ã¯ãç¹ã«ãŠããã¿ã¹ãª 3 ã€ã®ããã㧠(ã¡ã¿ã¯ã©ã¹äœ¿çšã®åé¡ã解決ãããã)ãã»ãšãã©ç ç² (ã¿ã€ãã³ã°ã®æŸæ£ãš Python XNUMX ã®ææ°ããŒãžã§ã³ã®äžéšã®ãç ç³èåã) ãªãã§å®è£ ãããŸããã ïŒã
ãã ããããã€ãã®å¶éããããŸãã
- Python 3 ã®ãµããŒããšã¯ãããŒãžã§ã³ 3.5 以éãæå³ããŸã (ãããžã§ã¯ãå ã« Python 3.4 ãååšããã®ã¯ãæ æ°ãæ¹åã®å¿ èŠæ§ãæ¬ åŠããŠããããã§ããXNUMX ããŸã 䜿çšãããŠãã客芳çãªçç±ãæãã€ãã®ã¯é£ããããã§ã)ã
- Python 2.7 ã§ã¯ãã©ã€ãã©ãªã¯ã»ãã ãªãã©ã«ã®éã·ãªã¢ã«åããµããŒãããŸããã 説æ
ãã㧠ã ãããããããå®è£ ããã人ããããã倧æè¿ã§ã :);
ãã®ã©ã€ãã©ãªã«ã¯ã解æãšã©ãŒãçºçããå Žåã®äŸå€ã¡ã«ããºã ããããŸãã å©çšå¯èœãªã¢ãã©ã€ã¶ãŒã®ãããã§ãæååãèªèã§ããªãã£ãå Žåãå€ã¯æååã®ãŸãŸã«ãªããŸã (å©äŸ¿æ§ãšãBash ã§ã®å€æ°ã®åäœã«é¢ããéåžžã®ããžãã¯ãšã®äžäœäºææ§ã®ãã)ã
Pythonã·ã§ã«ã©ã€ãã©ãª
次ã«ãXNUMX çªç®ã®ã©ã€ãã©ãªã«ã€ããŠèª¬æããŸã (æ¢åã®é¡äŒŒäœã®æ¬ ç¹ã«ã€ããŠã®èª¬æã¯çç¥ããŸããããã¯ãsmart-env ã§èª¬æãããã®ãšåæ§ã§ããé¡äŒŒäœ -
äžè¬ã«ãå®è£ ã®èãæ¹ãšãã®èŠä»¶ã¯ãäŸãããããããã«ãsmart-env ã«ã€ããŠèª¬æãããã®ãšäŒŒãŠããŸãã
from python_shell import Shell
Shell.ls('-l', '$HOME') # Equals "ls -l $HOME"
command = Shell.whoami() # Equals "whoami"
print(command.output) # prints your current user name
print(command.command) # prints "whoami"
print(command.return_code) # prints "0"
print(command.arguments) # prints ""
Shell.mkdir('-p', '/tmp/new_folder') # makes a new folder
ã¢ã€ãã¢ã¯æ¬¡ã®ãšããã§ãã
- Python ã®äžç㧠Bash ãè¡šãåäžã®ã¯ã©ã¹ã
- å Bash ã³ãã³ãã¯ãShell ã¯ã©ã¹ã®é¢æ°ãšããŠåŒã³åºãããŸãã
- åé¢æ°åŒã³åºãã®ãã©ã¡ãŒã¿ãŒã¯ã察å¿ãã Bash ã³ãã³ãåŒã³åºãã«æž¡ãããŸãã
- åã³ãã³ãã¯ãåŒã³åºãããç¬éã«ãä»ããã§ãå®è¡ãããŸãã åæã¢ãããŒãã¯æ©èœããŸãã
- æšæºåºåã®ã³ãã³ãã®åºåãšãã®æ»ãã³ãŒãã«ã¢ã¯ã»ã¹ããããšãã§ããŸãã
- ã³ãã³ããã·ã¹ãã ã«ãªãå Žåã¯ãäŸå€ãã¹ããŒãããŸãã
Smart-env ãšåæ§ã«ãPython 2 ã¯ãµããŒããããŠããŸãã (ãã ããããå°ãç ç²ãå¿ èŠã§ãã)ãPython 3.0 ïœ 3.4 ã¯ãµããŒããããŠããŸããã
å³æžé€šæŽåèšç»
ãããã®ã©ã€ãã©ãªã¯ä»ãã䜿çšã§ããŸããäž¡æ¹ãšãå ¬åŒ PyPI ã«æ²èŒãããŠããŸãã ãœãŒã¹ã¯ Github ã§å ¥æã§ããŸã (äžèšãåç §)ã
ã©ã¡ãã®ã©ã€ãã©ãªããé¢å¿ã®ãã人ããåéãããã£ãŒãããã¯ãèæ ®ããŠéçºãããŸãã ãŸããsmart-env ã§ããŸããŸãªæ°æ©èœãæãã€ãã®ãé£ããå Žåã¯ãpython-shell ã§ééããªãä»ã«è¿œå ã§ãããã®ããããŸãã
- ãã³ããããã³ã°åŒã³åºãã®ãµããŒãã
- ããŒã ãšã®å¯Ÿè©±åã³ãã¥ãã±ãŒã·ã§ã³ã®å¯èœæ§ (æšæºå ¥åã§ã®äœæ¥)ã
- æ°ããããããã£ãè¿œå ããŸã (ããšãã°ãstderr ããã®åºåãåãåãããããã£)ã
- å©çšå¯èœãªã³ãã³ãã®ãã£ã¬ã¯ããªã®å®è£ (dir() é¢æ°ã§äœ¿çšãããã)ã
- ç
ãªãã¡ã¬ã³ã¹
- ã¹ããŒãç°å¢ã©ã€ãã©ãª:
github㮠ОPyPI - Pythonã·ã§ã«ã©ã€ãã©ãª:
github㮠ОPyPI é»å ±ãã£ã³ãã« ã©ã€ãã©ãªã®æŽæ°
UPD 23.02.2020ïŒ
* ãªããžããªã移åããã察å¿ãããªã³ã¯ãæŽæ°ãããŸãã
* ããŒãžã§ã³ python-shell==1.0.1 ã¯ã29.02.2020 幎 XNUMX æ XNUMX æ¥ã®ãªãªãŒã¹ã«åããŠæºåäžã§ãã å€æŽã«ã¯ãã³ãã³ãã®ãªãŒãã³ã³ããªãŒããš dir(Shell) ã³ãã³ãã®ãµããŒããç¡å¹ãª Python èå¥åã䜿çšããã³ãã³ãã®å®è¡ããã°ä¿®æ£ãå«ãŸããŸãã
åºæïŒ habr.com