[python] externí program proměnné
Petr Přikryl
prikryl na atlas.cz
Čtvrtek Listopad 21 16:17:28 CET 2013
Přímo z shelu (cmd) se o něčem takovém nedá rozumně
uvažovat. Musela by se nějak fikaně modifikovat datová oblast
rodičovského procesu, což žádný OS nevidí rád.
Proměnné prostředí zde se vždycky kopírují do dětského procesu
a dělá se to v okamžiku vytváření nového procesu. Opačná cesta není.
Jenže Python se do té cesty umí vklínit jinak. Umí vytvořit nový
proces a předhodit mu místo kopie svůj vlastní prostor s proměnnými
prostředí. Ale ten je taky jen kopií z jeho otce. To znamená, že v Pythonovském
procesu sice zjistím, co udělal potomek, ale rodičovi už to ven neřeknu.
Dejme tomu, že mám dávku a.bat
==============================
@echo off
set moje=moje promenna prostredi
echo %0: %moje%
==============================
Pythonovský skript může vypadat takto (a.py)
==============================
#!python3
import os
import subprocess
p = subprocess.Popen('a.bat', env=os.environ)
retcode = p.wait()
v = os.environ['moje']
print('Python: retcode z davky je {}, vracena hodnota je {}'.format(retcode, repr(v)))
==============================
Vypíše to:
==============================
c:\__Python\geon>a.py
a.bat: moje promenna prostredi
Python: retcode z davky je 0, vracena hodnota je 'moje promenna prostredi'
==============================
Tady to není nic proti ničemu -- žádné znásilňování. Jen se prostě neudělá kopie
vlastního prostředí, ale předá se to stejné prostředí dětskému procesu.
> 2013/11/20 <geon na post.cz <mailto:geon na post.cz>>
>
> Jak z Pythonu zavolat externí program (*.bat), aby po navrácení do
> pyscriptu zůstaly zachovány systémové proměnné v něm nastavené?
>
> wxp, w7, py3.2, py2.7
Další informace o konferenci Python