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"
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脚本中未读取参数