【问题标题】:Unable to call python function using shell script无法使用 shell 脚本调用 python 函数
【发布时间】:2019-11-19 07:30:09
【问题描述】:

我正在使用一个shell脚本来调用python函数-

python -c 'import create_table; create_table.createTable()'

此脚本位于“scripts”目录中,而 create_table.py 文件位于另一个目录中 - “cdk” 文件夹结构将如下所示 -

infra -> cdk -> create_table.py
      -> scripts -> run-script.sh

cdk 和 scripts 目录在 infra 目录中处于同一级别。

当我尝试运行我的脚本时,它给出了以下错误 -

ModuleNotFoundError: No module named 'create_table'

我尝试将 create_table.py 文件放在脚本目录中,但它仍然给出相同的错误。 我指的是这个问题 - Calling a Python function from a shell script 谁能帮帮我?我在这里遗漏了什么吗?

更新 - create_table.py 代码

import boto3

def createTable():
    print("createTable function")

这个python文件中没有类。

【问题讨论】:

    标签: python python-3.x shell


    【解决方案1】:

    您的脚本和包位于不同的目录中。您需要将__init__.py 添加到您的cdk。这将告诉 python 它是一个模块。 然后运行 python -c 'import ..cdk.create_table; create_table.createTable()

    【讨论】:

    • 我需要在 init.py 文件中添加什么吗?我是否需要在 cdk.create_table 之前添加两个点
    • __init.py__ 是一个空文件,表示目录将作为模块。您必须提供相对或绝对路径。导入时添加 .. 表示它必须从脚本中退出并转到 cdk
    【解决方案2】:

    正确导入模块

    也可以直接使用createTable() 而不是create_table.createTable()

    python -c 'import sys; sys.path.insert(0, "../cdk"); from create_table import createTable; createTable()'
    

    【讨论】:

    • create_table.py 文件中没有类。所以“from create_table import createTable;”将不起作用
    • @Nitesh 您调用了该函数。您没有导入整个文件。我在我的 shell 上进行了测试,create_table.createTable() 给出了一个错误,而createTable() 没有
    • 我在脚本中添加了这一行 - python -c 'import sys; sys.path.insert(0, "infra/cdk");从创建表导入创建表; createTable()' 并给出此错误 - ModuleNotFoundError: No module named 'create_table'
    • 感谢您更新绝对路径。我会试一试,然后告诉你。
    • 查看编辑python -c 'import sys; sys.path.insert(0, "../cdk"); from create_table import createTable; createTable()'
    【解决方案3】:

    您很可能会遇到问题,因为导入取决于您调用run-script.sh 的路径。对此的解决方案可能是添加:

    if __name__ == "__main__":
        createTable()
    

    create_table.py 的末尾并将run-script.sh 的内容替换为:

    #!/bin/bash
    pth=`dirname $0`
    python3 $pth/../cdk/create_table.py
    

    这样做后,您应该可以从任何您想要/需要的路径运行它。

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      相关资源
      最近更新 更多