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


139

我尝试谷歌搜索答案,但没有运气。

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

例如我要job.sh执行python_script.py

如何做到这一点?


2
您是否尝试过仅python python_script.py输入Shell脚本?
thkala 2010年

嗯,python python_script.py。或者只是./python_script.py脚本得到了一个爆炸。

2
@delnan:./python_script.py还要求脚本是可执行文件
thkala 2010年

您到底尝试了什么,有什么问题?您要么没有做过那么出色的Google搜索,要么有很多您没有告诉我们……
thkala 2010年

3
这是一个比较老的问题,但是最好/最完整的答案是若昂·维克托(JoãoVíctor)的问题。请务必仔细阅读。
Still.Tony

Answers:


193

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

python path/to/the/python_script.py

细节:

  • 在文件job.sh中,放入
#!/bin/sh
python python_script.py
  • 执行以下命令以使脚本可运行: chmod u+x job.sh
  • 运行 : ./job.sh

2
这取决于您的系统。Python 3可能是默认的python运行时,也可能不是。您可以通过运行进行检查python --version,并可以使用强制执行该版本python3 hello.py
Jean-Bernard Jansen

如果找不到已安装的导入文件(如熊猫)怎么办?
mah65

这意味着您启动了错误的python二进制文件或环境不正确。在这种情况下,您应该填充virtualenv,然后运行source PATH/TO/VENV/bin/activate然后致电python python_script.py
Jean-Bernard Jansen

我正在尝试在automator中执行此操作,但出现错误;/path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permitted有没有办法在bash脚本中内联包含我的python代码?
Keyslinger

111

方法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

5
请修改您的答案以使其更具可读性。您可以使用答案编辑器中的101010按钮将脚本内容标记为代码。
thkala 2010年

1
我总是忘记#!/usr/bin/env python。请记住要确保您为系统引用了正确的python版本+路径!
Still.Tony

10

恕我直言

python /path/to/script.py

是非常错误的,尤其是在这些日子里。哪个蟒蛇?python2.6?2.7?3.0?3.1?大多数时候,您需要在python文件的shebang标记中指定python版本。我鼓励使用

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

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

#!/ bin / bash

/path/to/script.py

这样,您所需的python版本就只写在一个文件中。如今,大多数系统同时具有python2和python3,并且碰巧symlink python指向python3,而大多数人希望它指向python2


1
您可以像使用一样传递参数python script.py param吗?
克里斯蒂安

@kristian yes./abc.py -h

7

将以下程序另存为print.py

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

然后在终端中输入:

chmod +x print.py
./print.py

4

这最适合我:在脚本顶部添加以下内容:

#!c:/Python27/python.exe

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

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

为了澄清起见,这是Windows特定的。我使用的提示是Git bash。我发现它超级有用。特别是在Windows环境中
peterb

4

这对我有用:

  1. 创建一个新的外壳文件作业。这么说吧: touch job.sh并添加命令以运行python脚本(您甚至可以向该python添加命令行参数,我通常会预先定义命令行参数)。

    chmod +x job.sh

  2. 在内部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文件中。
  • &&是一个逻辑运算符,仅在成功执行以上操作后才运行,并且作为可选回显 “用python_file.py完成”将在运行时回显到cli / terminal上。

4

您应该能够像python scriptname.py例如调用它

# !/bin/bash

python /home/user/scriptname.py 

另外,请确保脚本具有运行权限。

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



1

由于其他帖子都说了所有(我在寻找以下内容时偶然发现了该帖子)。
这是从另一个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)

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.