Использование subprocess
очень конкретно означает, что вы запускаете другой процесс.Процесс, в котором была установлена переменная, больше не будет существовать, когда управление вернется из подпроцесса обратно в Python.
Попробуйте
import os
import subprocess
env = os.environ.copy()
env['x'] = '5'
subprocess.check_call(
'echo %x%',
shell=True,
env=env)
Обратите внимание также на переключение на check_call
- вероятно, оно нездесь не имеет большого значения, но обычно вы должны проверять сбои подпроцесса.