【问题标题】:How to solve 'AttributeError: 'module' object has no attribute 'run'' from subprocess.run()如何解决'AttributeError:'module'对象没有来自subprocess.run()的属性'run''
【发布时间】:2019-04-03 15:26:11
【问题描述】:

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

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

【问题讨论】:

  • 当前目录下是否有名为subprocess.pysubprocess.pyc的文件?
  • 你从中得到了什么输出:print (subprocess.__file__)
  • 感谢 cmets!我发现 subprocess.__file__ 正在抛出 python 2 版本,因此 subprocess 将不起作用。如何解决这个问题?

标签: python bash subprocess


【解决方案1】:

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

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

Running Python File in Terminal

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 2021-01-15
    • 2015-05-16
    • 1970-01-01
    • 2022-12-20
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多