В настоящее время я использую скрипт Python для запуска команд в оболочке Linux. Когда я меняю каталог, он не работает (когда я запускал команду ls, он перечислял файлы исходного каталога). Я хочу изменить каталог на рабочий стол.
Мой код:
import os
os.popen("cd Desktop")
d = os.popen("ls")
x = d.read()
print (x)
Каждый раз, когда вы запускаете os.popen(), он запускает указанную команду в другом процессе. Так что это не влияет на ваш процесс Python. Думайте об этом как об открытии окна терминала и вводе команды, а затем закрытии этого окна. На следующий os.popen() не влияет предыдущий.
d = os.popen("cd Desktop && ls") или d = os.popen("ls ./Desktop")Возможный дубликат Как изменить каталог (cd) в Python?, Как изменить рабочий каталог для сценария оболочки на Обмен стеками Unix и Linux и т. д.






Гораздо лучше использовать модуль subprocess. У него более приятный API и он принимает ключевое слово для этого:
>>> import subprocess as sp
>>> sp.call("ls -ll", cwd='/tmp', shell=True)
Хотя, возможно, тоже избегайте shell=True. Вам нужно будет самостоятельно разбить команду на список, а затем sp.call(['ls', '-ll'], cwd='/tmp') -- см. также stackoverflow.com/questions/3172470/… ... и пока мы на этом, возможно, предпочтительнее check_call или subprocess.run(..., check=True) (см. stackoverflow.com/questions/4256107/…)
Самое простое и, вероятно, самое простое решение здесь — использовать os.chdir. Ниже приведен пример
In[6]: os.listdir()
Out[6]:
['.flask-env',
'mydb_app',
'requirements.txt',
'.idea',
'sample_file_auth.py',
'login_app']
In[7]: os.chdir('/home/rbhanot/tools')
In[8]: os.listdir()
Out[8]: ['miniconda3', 'nvim']
Попробуйте
os.chdir()