Shell 脚本:从 shell 脚本中执行 python 程序

Posted

技术标签:

【中文标题】Shell 脚本:从 shell 脚本中执行 python 程序【英文标题】:Shell Script: Execute a python program from within a shell script 【发布时间】:2011-05-21 14:21:04 【问题描述】:

我试过用谷歌搜索答案,但没有成功。

我需要使用我的作品超级计算机服务器,但是要运行我的python脚本,它必须通过shell脚本执行。

比如我想让job.sh执行python_script.py

如何做到这一点?

【问题讨论】:

你试过把python python_script.py放在你的shell脚本里吗? 嗯,python python_script.py。或者只是./python_script.py,如果脚本有一个shebang。 @delnan: ./python_script.py 还要求脚本是可执行的 您到底尝试了什么,有什么问题?要么你没有在谷歌搜索上做得那么好,要么你没有告诉我们很多...... 这是一个相当古老的问题,但最好/最完整的答案是 João Víctor 提出的。请务必仔细阅读。 【参考方案1】:

只需确保 python 可执行文件在您的 PATH 环境变量中,然后添加到您的脚本中

python path/to/the/python_script.py

详情:

在文件job.sh中,放这个
#!/bin/sh
python python_script.py
执行此命令使脚本可以为您运行:chmod u+x job.sh 运行它:./job.sh

【讨论】:

这取决于您的系统。 Python 3 可能是默认的 Python 运行时,也可能不是。您可以通过运行python --version 进行检查,您可以使用python3 hello.py 强制执行版本。 没有找到已经安装好的导入,比如pandas怎么办? 这意味着你启动了错误的python二进制文件或环境不正确。在这种情况下,您应该填充一个 virtualenv,然后运行 ​​source PATH/TO/VENV/bin/activate 然后调用 python python_script.py 我正在尝试在 automator 中执行此操作,但出现错误; /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permitted 有没有办法将我的 python 代码内嵌在 bash 脚本中?【参考方案2】:

您应该能够以python scriptname.py 的形式调用它,例如

# !/bin/bash

python /home/user/scriptname.py 

还要确保脚本有运行权限。

您可以使用chmod u+x scriptname.py 使其可执行。

【讨论】:

【参考方案3】:

方法 1 - 创建一个 shell 脚本:

假设你有一个python文件hello.py 创建一个名为job.sh的文件,其中包含

#!/bin/bash
python hello.py

使用标记它可执行

$ chmod +x job.sh

然后运行它

$ ./job.sh

方法 2(更好) - 让 python 本身从 shell 运行:

修改您的脚本hello.py 并将其添加为第一行

#!/usr/bin/env python

使用标记它可执行

$ chmod +x hello.py

然后运行它

$ ./hello.py

【讨论】:

请编辑您的答案以使其更具可读性。您可以使用答案编辑器中的 101010 按钮将脚本内容标记为代码。 我总是忘记#!/usr/bin/env python。请记住确保您为系统引用了正确的 python 版本 + 路径!【参考方案4】:

恕我直言,写作

python /path/to/script.py

这是完全错误的,尤其是在这些日子里。哪条蟒蛇?蟒蛇2.6? 2.7? 3.0? 3.1?大多数情况下,您需要在 python 文件的 shebang 标记中指定 python 版本。我鼓励使用

#!/usr/bin/env python2 #or python2.6 or python3 or even python3.1
为了兼容性。

在这种情况下,最好让脚本可执行并直接调用它:

#!/bin/bash /path/to/script.py

这样你需要的python版本只写在一个文件里。现在大多数系统同时有python2和python3,而符号链接python恰好指向python3,而大多数人期望它指向python2

【讨论】:

你能像python script.py param一样传递参数吗? @kristian 是的 ./abc.py -h【参考方案5】:

这对我最有效: 在脚本顶部添加:

#!c:/Python27/python.exe

(C:\Python27\python.exe 是我机器上 python.exe 的路径) 然后通过以下方式运行脚本:

chmod +x script-name.py && script-name.py

【讨论】:

澄清一下,这是特定于 Windows 的。我使用的提示是 Git bash。我觉得它超级有用。尤其是在Windows环境中【参考方案6】:

这对我有用:

    创建一个新的 shell 文件作业。所以让我们说: touch job.sh 并添加命令以运行 python 脚本(您甚至可以向该 python 添加命令行参数,我通常预定义我的命令行参数)。

    chmod +x job.sh

    job.sh里面添加如下py文件,比如说:

    python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file.py"

    python_file1.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file1.py"

job.sh 的输出应如下所示:

Done with python_file.py

Done with python_file1.py

当我必须运行多个具有不同参数的 python 文件时,我通常使用它,预定义。

注意:快速了解这里发生的事情:

python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "completed with python_file.py" . 

这里的 shell 脚本将运行文件 python_file.py 并在运行时向 python 文件添加多个命令行参数。 这并不一定意味着您还必须传递命令行参数。 你可以像这样使用它:python python_file.py,简单明了。 接下来,>> 将打印此 .py 文件的输出并将其存储在 testpy-output.txt 文件中。 && 是一个逻辑运算符,只有在上述成功执行后才会运行,并且作为可选的 echo “用 python_file.py 完成”将回显到您的 cli/终端在运行时。

【讨论】:

【参考方案7】:

我用这个,效果很好

#/bin/bash
/usr/bin/python python python_script.py

【讨论】:

【参考方案8】:

将以下程序另存为print.py

#!/usr/bin/python3
print('Hello World')

然后在终端输入:

chmod +x print.py
./print.py

【讨论】:

【参考方案9】:

因为其他帖子说明了一切(我在寻找以下内容时偶然发现了这篇帖子)。 这是一种如何从另一个 python 脚本执行 python 脚本的方法:

Python 2:

execfile("somefile.py", global_vars, local_vars)

Python 3:

with open("somefile.py") as f:
    code = compile(f.read(), "somefile.py", 'exec')
    exec(code, global_vars, local_vars)

您可以通过提供其他一些sys.argv 来提供参数

【讨论】:

以上是关于Shell 脚本:从 shell 脚本中执行 python 程序的主要内容,如果未能解决你的问题,请参考以下文章

Python:使用参数(变量)执行shell脚本,但在shell脚本中未读取参数

shell脚本中执行python脚本并接收其返回值的例子

使用 django:从“python manage.py shell”到 python 脚本

python如何重新执行脚本?

编写shell脚本运行python文件

无法从 bash shell 脚本执行 Tcl 脚本