Ответ 1
При запуске %foo
эта команда запускается в новом экземпляре оболочки, запущенном как собственный процесс. Когда эта оболочка выходит, изменения в ее состоянии (например, ее рабочий каталог) теряются вместе с ней; они не влияют на родительский процесс Python, который породил его.
Это то же самое, что запуск sh -c 'cd /'
не изменяет текущий рабочий каталог в оболочке. (Действительно, запуск нового процесса как sh -c "$some_command"
- это именно то, как работает библиотека стандартного C system(some_command)
, и его эквивалент Python os.system(some_command)
).