Isso depende de qual é o problema. Se for para clonar e modificar o ambiente, uma solução pode ser:
subprocess.Popen(my_command, env=dict(os.environ, PATH="path"))
Mas isso depende um pouco do fato de as variáveis substituídas serem identificadores python válidos, o que geralmente é (com que frequência você encontra nomes de variáveis de ambiente que não são alfanuméricos + sublinhado ou variáveis que começam com um número?).
Caso contrário, você poderá escrever algo como:
subprocess.Popen(my_command, env=dict(os.environ,
**{"Not valid python name":"value"}))
No caso muito estranho (com que frequência você usa códigos de controle ou caracteres não-ascii em nomes de variáveis de ambiente?) Que as chaves do ambiente são as que bytesvocê não pode (no python3) usar essa construção.
Como você pode ver as técnicas (especialmente a primeira) usadas aqui, os benefícios nas chaves do ambiente são normalmente identificadores python válidos e também conhecidos antecipadamente (no momento da codificação), a segunda abordagem tem problemas. Nos casos em que esse não é o caso, você provavelmente deve procurar outra abordagem .
os.pathsepvez de ":" para caminhos que funcionam entre plataformas. Veja stackoverflow.com/questions/1499019/…