Я хочу, чтобы моя программа на Python cd
в каталог через терминал как родительский процесс. Есть какой-либо способ сделать это?
Я надеялся на что-то вроде этого:
$ ./cd.py Desktop/scripts
$ pwd
/home/mfto/Desktop/scripts
Заранее спасибо!
Нет. Изменения в рабочем каталоге могут повлиять только на текущий процесс (и любые будущие дочерние элементы).
Это невозможно, и вы обнаружите, что на самом деле cd
не является « программой » в обычном смысле - это не файл на диске, который может быть выполнен, а вместо этого « встроенная » команда. Встроенные команды интерпретируются самой оболочкой (например, bash
). Список встроенных команд bash
см. В разделе « Команды встроенной оболочки » help
страницы (или используйте встроенную справку ).
Если бы cd
не был встроен в оболочку, то было бы невозможно изменить каталог без разветвления нового процесса каждый раз (что было бы очень грязно).
Это связано с тем, что текущий рабочий каталог (например, среда) является свойством процесса. Эти вещи могут быть унаследованы от родителей к ребенку, но не могут быть «толкнули» обратно от детей к родителям.
Если вы действительно хотите, чтобы скрипт Python изменил текущий рабочий каталог, а затем представил оболочку, вам нужно будет сделать что-то вроде этого:
cd.py
#!/usr/bin/env python3
import os
os.chdir('/tmp/')
os.system('bash')
$ pwd
/home/attie/
$ echo $$
30665 # the original shell's PID
$ ./cd.py
$ pwd
/tmp
$ echo $$
30464 # the sub-shell's PID... it's parent is python
$ exit
exit
$ pwd
/home/attie/
$ echo $$
30665 # the original shell's PID