【问题标题】:Can't run a python file from shell script in the same directory [duplicate]无法从同一目录中的 shell 脚本运行 python 文件[重复]
【发布时间】:2021-05-20 06:51:07
【问题描述】:

我正在尝试从一个 Python 程序调用一个 shell 脚本,该程序又运行一个 Python 程序。所以我创建了一个名为 run.sh 的文件,其中包含以下代码行,

source venv/bin/activate
python main.py

上面的脚本会被这段代码调用,

from pathlib import Path
import os
import subprocess

class Handler:

    ENTRYPOINT = 'run.sh'

    def run(self, project_path):
        if os.path.exists(project_path):
            subprocess.call(['bash', project_path+self.ENTRYPOINT])
        else:
            print('Project path does not exist!')

所以,每当执行上面的run方法时,都会抛出这个错误

python: 无法打开文件 'main.py': [Errno 2] 没有这样的文件或目录

run.sh 文件和 main.py 文件位于同一级别。我对shell脚本了解不多,只是用谷歌搜索,但我找不到上述错误的原因。甚至不确定它是否与那个shell脚本有关。任何帮助将不胜感激。

【问题讨论】:

  • run.sh 文件的位置与您的问题无关。在 Python 调用之前在脚本中执行 ls -ld $PWD/*.py,以查看此目录中有哪些 Python 文件。

标签: python bash shell


【解决方案1】:

我猜你是从另一个目录调用run.sh,而不是脚本所在的目录?如果是这样,这将解释一切。您正在使用 relative 路径,该路径根据当前工作目录 (pwd) 进行解析。

要使脚本在任何地方都能运行,请查看How can I set the current working directory to the directory of the script in Bash?

在 Linux 上:

cd "$(dirname "$0")" # cd into the directoy where the run.sh is
python main.py

【讨论】:

  • 谢谢@Derlin。它现在正在工作。上面的链接有助于理解这个问题。
猜你喜欢
  • 2016-04-04
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 2016-12-08
  • 2013-08-06
  • 2012-05-02
相关资源
最近更新 更多