Я создаю сценарий bash, который вызывает сценарий python, который, в свою очередь, запускает другие процессы в bash, используя subprocess.run()
. Однако, когда bash-скрипт запускает внутри него скрипт python, в строке, где вызывается subprocess.run, я получаю сообщение об ошибке:
run_metric = subprocess.run(command, shell=True, stdout = subprocess.PIPE, universal_newlines = True)
AttributeError: 'module' object has no attribute 'run'
1) Я удостоверился, что запустил скрипт, используя python 3, активировав среду conda с python = 3.6, что не должно вызывать никаких проблем при вызове subprocess.run. Интересно то, что если я изменю subprocess.run () на subprocess.Popen (), скрипт будет работать, но я не смог понять, как правильно получить run_metric.stdout
.
2) У меня нет файла subprocess.py в каталоге, в котором я работаю
3) результат print(subprocess.__file__)
показывает мне, что python не 3,6: /usr/lib/python2.7/subprocess.pyc
Кроме того, я пытался использовать что-то вроде
from subprocess import run
и убедившись, что в скрипте Python и в функции, которую я имел
Сценарий bash выглядит следующим образом:
SWC_FOLDER_PATH=$(pwd)
sudo chmod +x /media/leandroscholz/KINGSTON/Results_article/Tracing_data/run_metrics.py
echo "run /media/leandroscholz/Tracing_data/run_metrics.py ${SWC_FOLDER_PATH} /media/leandroscholz/KINGSTON/Results_article/TREEStoolbox_tree_fixed.swc"
python /media/leandroscholz/Tracing_data/run_metrics.py ${SWC_FOLDER_PATH} /media/leandroscholz/TREEStoolbox_tree_fixed.swc
И скрипт Python, который я запускаю, вызывает определенную функцию, которая использует subprocess.run()
таким образом (только часть кода, где возникает проблема):
import subprocess
import glob
import numpy as np
def compute_metrics(swc_folder_path, gt_file_path):
# first get list of files in swc_folder_path
swc_files = (glob.glob(swc_folder_path+"/*_fixed.swc"))
n_swc_files = len(swc_files)
workflow_dict = gets_workflow_dict(swc_files)
n_images = get_n_images(swc_files)
n_workflows = len(workflow_dict)
for swc in range(0,n_swc_files):
command = "java -jar /home/leandroscholz/DiademMetric.jar -G " + swc_files[swc] +" -T " + gt_file_path
run_metric = subprocess.run(command, shell=True, stdout = subprocess.PIPE, universal_newlines = True)
Я использую subprocess.run в Python, потому что, в конце концов, я хочу получить строку run_metric.stdout после запуска процесса в bash, чтобы потом я мог сохранить его в массиве и сохранить в текстовом файле. ,
Надеюсь, я был достаточно ясен и предоставил достаточно информации.
Спасибо!