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

时间:2019-04-03 15:26:11

标签: python bash subprocess

我正在创建一个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文件中。

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

1 个答案:

答案 0 :(得分:0)

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

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

Running Python File in Terminal