【问题标题】:How to execute python program using a shell script (and makefile?)如何使用 shell 脚本(和 makefile?)执行 python 程序
【发布时间】:2015-09-28 01:12:53
【问题描述】:

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

[编辑] 我的困惑主要是因为我的项目需要一个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。

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

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

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

all:
   /bin/true

非常感谢您在此问题上的任何帮助!

【问题讨论】:

    标签: python bash shell makefile


    【解决方案1】:

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

    $ python your_program.py $1
    

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

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

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

    $ make
    $ ./your_script.sh 
    

    【讨论】:

    • 该死!尽管问题如此复杂,但可以理解我的困惑点!这绝对有助于我理解同时拥有 .sh 和 makefile 的意义。是的,我将与教授确认,但至少现在我可以进行更集中的查询。再次感谢!
    【解决方案2】:

    你不能在不运行 something 的情况下将某些东西设置为可执行;既然一次就够了,你还不如手动做。 (这就是我们所有人对任何非自动生成的文件所做的事情。)

    您可以通过两种方式执行 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 本身没有任何意义。


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

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

    【讨论】:

    • “另外,你被指示拥有的 Makefile 没有任何意义,因为它什么都不做。”听起来教授的自动评分器被硬编码为首先运行make。这只是让评分者满意的一种解决方法。
    • @JohnKugelman 是的,你的想法是正确的。我们被告知,由于分级脚本的编写方式,伪造的 makefile 比没有更方便。
    • @Amadan 非常感谢您花时间回答!我确实知道如何直接从解释器运行 python 文件,以及使用 shebang 运行它们(因为我通常总是选择这两个选项之一来运行我的代码,无论如何);但我的问题是如何使用单独的 shell 脚本和虚假的 makefile 运行 python 文件,因为我以前从未这样做过,而且看起来有点奇怪。回想起来,我绝对可以更清楚这一点,所以再次感谢您抽出时间提供帮助!
    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 2018-03-28
    • 1970-01-01
    • 2016-04-20
    相关资源
    最近更新 更多