我已经阅读了大量的教程和成堆的问题/答案,但显然我的问题太具体,我的知识太有限,无法拼凑出一个解决方案。
[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 "$@"