【问题标题】:Calling python script from a Bash script从 Bash 脚本调用 python 脚本
【发布时间】:2016-07-30 04:06:19
【问题描述】:

我正在尝试从 bash 脚本调用 python 脚本。仅当我尝试从 bash 脚本运行 .py 时才会出现导入错误。如果我使用 python myscript.py 运行,一切都很好。这是我的 bash 脚本:

while true; do
  python script.py

  echo "Restarting...";
  sleep 3;
done

我得到的错误:

Traceback (most recent call last):
  File "script.py", line 39, in <module>
    from pokemongo_bot import logger
  File "/Users/Paolo/Downloads/folder/t/__init__.py", line 4, in <module>
    import googlemaps
ImportError: No module named googlemaps

【问题讨论】:

标签: python bash import


【解决方案1】:

这个故事还有更多内容不在您的问题范围内。 您的 PYTHONPATH 变量在途中的某个地方变得混乱。
插入几行快速测试:

在 bash 中:

echo $PYTHONPATH

在你的蟒蛇中:

import os
print os.environ["PYTHONPATH"]

在某些时候,googlemaps 的路径丢失了。

【讨论】:

    【解决方案2】:

    您的问题出在脚本本身,您的 bash 代码没问题!如果直接从 bash 运行 python scrip.py 没有问题,则应测试是否对两个调用使用相同的解释器。您可以检查 python 脚本中的 shebang 行,它是文件中的第一行,例如 #!/usr/bin/env python 或 #!/usr/bin/python 并将其与 which python 命令的输出进行比较,如果输出不同,请尝试更改或添加shebang 行到文件中。如果您在 bash ./some_script.py 中直接调用文件,则 bash 读取第一行,如果是 shebang 行,他将执行该文件的特定命令。我的观点是,如果您使用两个不同的解释器直接使用 python script.py 和间接使用 ./script.py 调用文件,其中一个可能没有正确的 python 模块。

    如何编码:

    $ which python
    /usr/local/bin/python
    

    所以第二行是解释器构建shebang的路径,将其写入脚本文件的第一行。

    #!/usr/local/bin/python
    

    【讨论】:

    • bash: #!/bin/bash python: #!/usr/bin/env python .... 我应该改变什么吗?
    • 如果 python script.py 工作更新的答案应该可以工作。
    猜你喜欢
    • 2019-10-31
    • 2012-07-23
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2017-10-21
    • 1970-01-01
    相关资源
    最近更新 更多