如何从Bash Shell执行.py脚本

3

我打开终端并cd到我的文档目录,那里有一个名为trianglearea.py的.py文件,这是一个非常基本的程序,我正在尝试执行它。我在shell中输入/Documents$ python trianglearea.py,但没有任何反应;bash提示我输入另一个命令,好像我刚才输入的命令不存在一样。我尝试使用./trianglearea.py,但出现语法错误,因为我还没有进入交互式Python,而bash不理解我的Python脚本。如果我以gui方式打开文件并双击运行,一个窗口会闪现然后消失,但那不是我想要的。我想要在交互式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

我知道这不应该很难,但它却让我感到困惑。


1
你的脚本没有做任何事情。因此,当运行 python thing.py 时,你看到的是完全正常的。 - Mat
https://dev59.com/emYr5IYBdhLWcg3wIG1u#13933251 - Adem Öztaş
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__'(参见this answer以了解更多信息)。那个if语句本质上是在说,“如果我是从命令行运行的,则执行具有参数10和5的方法area并打印结果。”
最后,为了确保您的脚本可以像这样从提示符中运行./myscript.py,您需要告诉您的shell如何执行它。这是通过在文件顶部添加一个shebang line来完成的。
将所有内容组合起来,您的文件如下所示:
#!/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)

这是一个很好和友善的回答,Burhan,值得称赞的是你没有像一些人那样嘲笑。你应该得到我的点赞。 - sotapme

2
假设您的脚本文件名为mycode.py,那么您可以使用python -i mycode.py
$ python -i mycode.py
>>> area(10, 5)   

-i 当一个脚本作为第一个参数传递或使用 -c 选项时,在执行脚本或命令后进入交互模式。参考


Python-i正是我一直在努力弄清楚的东西,谢谢! - aaron
@arron 如果起作用了,我很高兴 :) - Grijesh Chauhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接