запустить несколько команд оболочки, которые зависят от первой (dir_path) - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь использовать subprocess.run для создания моего проекта CMake, но код завершается без ошибок, но он не работает.

код:

import subprocess

git_repo_remvoe_destination = '/home/yaodav/Desktop/'
git_repo_clone_destination = git_repo_remvoe_destination + 'test_clone_git'
test_path = git_repo_clone_destination + "/test/"
cmake_debug_path = test_path + "cmake-debug-build"
cmake_build_command = " cmake -Bcmake-build-debug -H. -DCMAKE_BUILD_TYPE=debug -DCMAKE_C_COMPILER=/usr/local/bin/gcc " \
                      "-DCMAKE_CXX_COMPILER=/usr/local/bin/c++ -Bcmake-build-debug -H. " \
                      "-DSYTEM_ARCH=x86_64-pc-linux-gnu-gcc-7.4.0"
cmake_link_command = "cmake --build cmake-build-debug --target all"

cmake_command = ['cd '+test_path, cmake_build_command, cmake_link_command]

out = subprocess.run(cmake_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)

Я пытался это ответ, но это не сработало

как мне это сделать?

1 Ответ

1 голос
/ 04 ноября 2019

2 Проблемы.

Сначала вы должны вызвать subprocess.run() один раз для каждой команды вместо того, чтобы поместить три разные команды в список.

Второй: команда cd ... просто меняет настоящеерабочий каталог в одном подпроцессе, и последующая команда больше не будет находиться в том же каталоге.

Однако есть простое решение.

subprocess.run имеет параметр cwd(https://docs.python.org/2/library/subprocess.html#popen-constructor), который позволяет указать каталог, в котором должен выполняться подпроцесс.

Итак, следующее должно сделать:

out = subprocess.run(cmake_build_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=test_path, shell=True)
out += subprocess.run(cmake_link_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=test_path, shell=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...