如何从bash shell执行.py脚本
我打开了一个终端,进入到我的文档文件夹,里面有一个叫做 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 个回答
之所以什么都没有发生,是因为你在脚本中没有调用你的方法,所以文件只是定义了这个方法,然后就结束了。解决这个问题很简单:
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)
假设你的脚本文件名是 mycode.py
,那么你可以使用 python -i mycode.py
来运行它:
$ python -i mycode.py
>>> area(10, 5)
-i
这个选项的意思是,当你把一个脚本作为第一个参数传入,或者使用了 -c
这个选项后,执行完脚本或命令后会进入交互模式。你可以在这里继续输入命令,和程序进行互动。参考链接