如何从bash shell执行.py脚本

3 投票
2 回答
14254 浏览
提问于 2025-04-17 15:20

我打开了一个终端,进入到我的文档文件夹,里面有一个叫做 trianglearea.py 的 .py 文件,这是一个非常简单的程序,我想运行它。
我在命令行里输入 /Documents$ python trianglearea.py,但什么都没有发生;bash(终端的一个命令行工具)让我输入下一个命令,好像我刚刚输入的命令不存在一样。我试着输入 ./trianglearea.py,但出现了语法错误,因为我没有进入交互式的 Python 环境,bash 也不理解我的 Python 脚本。如果我用文件管理器的方式去找到这个文件,双击它并选择在终端中运行,屏幕上会闪一下就消失,但这不是我想要的。我希望能在交互式 Python 中运行我的小程序,这样我就可以输入内容并实际使用我的函数。
这就是我在 .py 文件里写的全部内容

def area(base,height):
    ''' (number, number) - number
    Return area of a triangle with dimensions base * height

    >>>>area(10,5)
    25.0
    '''
    return base*height/2

我知道这不应该这么难,但我被难住了。

2 个回答

7

之所以什么都没有发生,是因为你在脚本中没有调用你的方法,所以文件只是定义了这个方法,然后就结束了。解决这个问题很简单:

def area(base,height):
    ''' (number, number) - number
    Return area of a triangle with dimensions base * height

    >>>>area(10,5)
    25.0
    '''
    return base*height/2

print area(10,5) # calling the method

正确的做法是添加一个检查:

if __name__ == '__main__':
    print area(10,5)

当你从命令行运行Python脚本时,一个特殊的变量__name__会被设置为字符串'__main__'(想了解更多可以看看这个回答)。这个if语句的意思就是,"如果我是从命令行运行的,就执行方法area,并传入参数10和5,然后打印结果。"

最后,为了确保你的脚本可以像这样从命令行运行./myscript.py,你需要告诉你的命令行如何执行它。这可以通过在文件顶部添加一个shebang行来实现。

把这些结合起来,你的文件看起来像这样:

#!/usr/bin/python

def area(base,height):
        ''' (number, number) - number
        Return area of a triangle with dimensions base * height

        >>>>area(10,5)
        25.0
        '''
        return base*height/2

if __name__ == '__main__':
    print area(10,5)
2

假设你的脚本文件名是 mycode.py,那么你可以使用 python -i mycode.py 来运行它:

$ python -i mycode.py
>>> area(10, 5)   

-i 这个选项的意思是,当你把一个脚本作为第一个参数传入,或者使用了 -c 这个选项后,执行完脚本或命令后会进入交互模式。你可以在这里继续输入命令,和程序进行互动。参考链接

撰写回答