如何使用shell脚本(和makefile?)执行python程序



我已经阅读了大量的教程和成堆的问题/答案,但显然我的问题太具体,我的知识太有限,无法拼凑出一个解决方案。

[Edit] 我的困惑主要是由于我的项目需要一个shell脚本和一个makefile来运行一个简单的python程序。我不确定为什么有必要这样做,因为这样做似乎是一种迂回的方式。看起来makefile和脚本很可能只是为了让自动评分器高兴,正如下面善良的受访者所提到的那样。所以,我想这是最好澄清教授,那么。我真的很感激你的回答——非常感谢你的帮助!

基本上,我想做的是通过program.sh (shell脚本)运行program.py(我的源代码),因此,当我在命令行

中输入以下内容时
./program.sh arg1

它运行program.py并将arg1传递到程序中,就好像我在命令行

中手动输入了以下内容一样
$ python program.py arg1

我还需要自动将program.sh设置为可执行的,这样$ chmod +x program.sh就不必事先输入了。

我已经阅读了这里提供的解决方案,这非常有帮助,但这似乎要求文件以.py扩展名执行,而我的特定应用程序需要.sh扩展名,以便按照上面的期望运行。

我想运行.sh文件的另一个原因是因为我还需要以某种方式包含一个makefile来运行程序,以及脚本(所以我假设我必须在脚本中包含make命令?)。

老实说,我不确定为什么makefile对于python程序是必要的,但是教授告诉我们,makefile对于分级脚本来说更方便,我们应该简单地为makefile的内容编写以下内容:

all:
   /bin/true

提前感谢你在这件事上的任何帮助!

您可以编写shell脚本来调用python脚本:

$ python your_program.py $1

如果你只需要传递一个参数给你的python脚本,假设该参数中没有空格。

如果你需要一个makefile,你可以让它使你的shell脚本可执行。

考虑到makefile是为了方便分级脚本,我怀疑您是否需要在脚本中添加对它的调用,但我会检查这一点。评分脚本可能做的是:

$ make
$ ./your_script.sh 

如果不运行某些东西,就不能将某些东西设置为可执行的;既然一次就足够了,你也可以手动操作。(这就是我们所有人对非自动生成的文件所做的事情。)

您可以用两种方式执行Python程序(对于任何其他解释性语言也是如此):

1)显式运行解释器:python program1.py arg1,它将找到默认的Python解释器(通常是/usr/bin/python)并告诉它运行您的脚本

2)在脚本前面加上"hashbang"魔术注释,并使脚本可执行:如果你在第一行输入#!/usr/bin/python并执行chmod a+x program1.py(使program1.py对每个人都可执行),那么每次你输入./program.py arg1,它就会像你运行/usr/bin/python program1.py args1一样。如前所述,您只需要执行一次chmod

你可以在shell脚本和makefile中同样使用这两种样式;不需要单独的sh文件。


同样,指示您拥有的Makefile没有意义,因为它什么也不做。这可能是你的教授打算用他自己的代替它,或者可能有其他的解释,但all: /bin/true本身没有意义。


如果你真的想要一个shell脚本,将它的所有参数传递给python脚本,它是:

#!/bin/sh
python program1.py "$@"

最新更新