Я хочу, чтобы моя программа на Python cd в каталог через терминал как родительский процесс. Есть какой-либо способ сделать это?

Я надеялся на что-то вроде этого:

$ ./cd.py Desktop/scripts
$ pwd
/home/mfto/Desktop/scripts

Заранее спасибо!

2 ответа2

1

Нет. Изменения в рабочем каталоге могут повлиять только на текущий процесс (и любые будущие дочерние элементы).

1

Это невозможно, и вы обнаружите, что на самом деле 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .