Как запустить команду оболочки параллельно с другой командой в python? - PullRequest
0 голосов
/ 20 июня 2020

Я хочу запустить команду оболочки в python. В оболочке я делаю что-то вроде этого

cd project_name
ls

вывод: app1 app2

cd app1

Я хочу сделать то же самое в python с модулем ОС

import os
os.system('cd project_name') #It goes into the folder project_name but when i run ls command it is showing same path.
os.system('ls')
os.sytem('cd app1') # No such file or directory

Скажите, пожалуйста, как я могу сделать то же самое. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Вы можете отслеживать пути в локальных переменных и использовать их по мере необходимости. pathlib предлагает удобный класс-оболочку для этого.

>>> from pathlib import Path
>>> project_path = Path("project_name")
>>> project_path
PosixPath('project_name')
>>> str(project_path)
'project_name'

Вы можете перечислить

>>> print(list(project_path.iterdir()))
[PosixPath('project_name/app1'), PosixPath('project_name/app2')]

И сделать подпути

>>> app1_path = project_path.joinpath("app1")
>>> app1_path
PosixPath('project_name/app1')
>>> str(app1_path)
'project_name/app1'

Вы все еще можете запускать команды с os.system (обратите внимание на точку с запятой, разделяющую две команды)

>>> import os
>>> rc = os.system(f"cd {app1_path};ls")
foo  some_file

или используйте модуль подпроцесса, который позволяет вам указать текущий рабочий каталог

>>> import subprocess as subp
>>> rc = subp.run("ls", shell=True, cwd=app1_path)
foo  some_file

Код, который в одностороннем порядке изменяет путь, может быть сложным читать. И легко заблудиться и работать не в том каталоге.

0 голосов
/ 20 июня 2020

Каждый раз, когда вы запускаете os.system (), вы создаете новую подоболочку, которая отделена от предыдущих вызовов os.system ().

Если вы хотите запустить несколько команд, вы можете связать их вместе с

os.system("cd projectname && ls && cd app1")

В качестве альтернативы вы можете изменить каталог в подоболочке с помощью

os.chdir(path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...