【问题标题】:Execute bash file from Python从 Python 执行 bash 文件
【发布时间】:2014-11-18 15:23:48
【问题描述】:

我想在 Python 中执行一个 shell 脚本文件。我目前正在使用 Envoy 执行此操作:

envoy.run('./scripts.sh')

但它会抛出一个No such file or directory 错误。

我想知道,上面的文件是在哪个路径下执行的?如何使上述脚本运行?它与 Python 脚本位于同一目录中。

【问题讨论】:

  • 问题也可能是您 script.sh 中的 shebang 行。也许它指向一个错误的解释器,这样你就会得到相同的错误信息。只是一个想法……
  • #!/bin/bash 是shebang-line
  • 好的,如果/bin/bash 存在,那么你应该看看envoy,我不知道那个包。试试envoy.run('pwd') 看看你在哪里。
  • 您是否已经在脚本中使用了chmod?我不知道 envoy 的确切作用,但它可能仍然需要您的脚本位于 $PATH 中。
  • 错误的 chmod 设置(缺少 x 标志)会产生“权限被拒绝”。

标签: python bash shell subprocess python-envoy


【解决方案1】:

程序在os.getcwd() 报告的当前工作目录中执行。对于命令行程序,它通常是您运行程序时所在的目录。要在与您的 python 脚本相同的目录中运行命令,请使用 __file__ 变量来确定您的位置:

import os
import envoy

my_path = os.path.dirname(os.path.abspath(__file__))
envoy.run('./scripts.sh', cwd=my_path)

【讨论】:

  • 确实,将cwd 指定为envoy chmod-ing scripts.sh 解决了我的问题。谢谢!
【解决方案2】:

您收到的错误不一定来自 python 本身,但您的 bash 脚本作为您发布的错误也可以从 bash 本身返回..

-bash: ./asdf: No such file or directory

你的 shell 脚本需要参数吗?另外,您是否尝试过直接而不是通过 python 执行您的 shell 脚本?

我建议的另一件事是使用环境 bash 而不是完整路径,因为由于 linux 操作系统设计的差异,这通常更适合可移植性。

#!/usr/bin/env bash

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2017-12-04
    • 1970-01-01
    • 2021-03-06
    • 2016-09-02
    • 1970-01-01
    相关资源
    最近更新 更多