如何解决'AttributeError:'模块'对象没有来自subprocess.run()的属性'run''

问题描述 投票:1回答:1

我正在创建一个bash脚本,它调用python脚本,然后使用subprocess.run()在bash中运行其他进程。但是,当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.6激活conda环境来使用python 3运行脚本,这不会给调用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脚本和我有import subprocess的功能

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)

我在python中使用subprocess.run,因为最后,我希望在bash中运行进程后获取run_metric.stdout的字符串,以便稍后将其存储在数组中并将其保存到txt文件中。

我希望我足够清楚并提供足够的信息。谢谢!

python bash subprocess
1个回答
0
投票

收到评论后,我测试了print(subprocess.__file__)的输出,显示正在使用的python是python2.7,

因此,我将python脚本的调用从python script.py更改为python3 script.py。我发现了这个问题,这也显示了从终端调用python程序的另一种方法。

Running Python File in Terminal

© www.soinside.com 2019 - 2024. All rights reserved.