Как изменить каталог Linux в скрипте Python?

В настоящее время я использую скрипт Python для запуска команд в оболочке Linux. Когда я меняю каталог, он не работает (когда я запускал команду ls, он перечислял файлы исходного каталога). Я хочу изменить каталог на рабочий стол. Мой код:

import os
os.popen("cd Desktop")
d = os.popen("ls")
x = d.read()
print (x)

Попробуйте os.chdir()

Filip Młynarski 30.01.2019 18:39

Каждый раз, когда вы запускаете os.popen(), он запускает указанную команду в другом процессе. Так что это не влияет на ваш процесс Python. Думайте об этом как об открытии окна терминала и вводе команды, а затем закрытии этого окна. На следующий os.popen() не влияет предыдущий.

John Anderson 30.01.2019 18:44
d = os.popen("cd Desktop && ls") или d = os.popen("ls ./Desktop")
Maurice Meyer 30.01.2019 18:58
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
124
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Гораздо лучше использовать модуль 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/…)

tripleee 30.01.2019 19:41

Самое простое и, вероятно, самое простое решение здесь — использовать 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']

Другие вопросы по теме