使用 Python,如何使用修改后的环境变量运行子进程并获取其 PID?我假设 subprocess.Popen() 是在正确的轨道上......
在 shell (bash) 中,我会这样做:
MY_ENV_VAR=value ./program_name arg1 arg2 etc &
这program_name
在后台运行,传入“arg1”、“arg2”和“etc”,并带有修改后的环境变量“MY_ENV_VAR”,其值为“value”。该程序program_name
要求将环境变量MY_ENV_VAR
设置为正确的值。
如何在 Python 中做同样的事情?我绝对需要进程的PID。(我的目的是保持 python 脚本运行并同时检查一些program_name
正在做的事情,我需要进程 ID 以确保它仍在运行。)
我试过了:
proc = subprocess.Popen(['MY_ENV_VAR=value', './program_name', 'arg1', 'arg2', 'etc'])
但当然,它希望第一项是程序,而不是环境变量。
也试过:
environ = dict(os.environ)
environ['MY_ENV_VAR'] = 'value'
proc = subprocess.Popen(['./program_name', 'arg1', 'arg2', 'etc', env=environ])
接近,我想,但没有雪茄。同样,这个:
environ = dict(os.environ)
environ['MY_ENV_VAR'] = 'value'
proc = subprocess.Popen(['echo', '$MY_ENV_VAR'], env=environ)
这在字面上与“$MY_ENV_VAR”相呼应,我想是因为没有外壳可以解释它。好的,所以我尝试上面的方法,但改用这一行:
proc = subprocess.Popen(['echo', '$MY_ENV_VAR'], env=environ, shell=True)
这很好,很漂亮,除了回显的值是空白的(显然不存在)。即使它确实有效,我也会得到 shell 的 PID,而不是我试图启动的实际进程。
我需要使用自定义环境变量启动一个进程并获取它的 PID(不是 shell 的 PID)。想法?