在终端中运行脚本时未显示的打印语句

时间:2017-01-27 18:49:21

标签: python linux scripting

我是新手在终端中运行python脚本。我运行了脚本./filename.py并确保它是可执行的chmod + x filename。我还把#!/ usr / bin / env python放在程序的顶部。我没有错误,但我的终端中没有显示任何打印语句。附上是我的代码。任何想法?

#!/usr/bin/env python

import ctypes
import os

def is_hidden(filepath):
    name = os.path.basename(os.path.abspath(filepath))
    return ('.' + name) or (has_hidden_attribute(filepath))

def has_hidden_attribute(filepath):
    try:
        attrs = ctypes.windll.kernel32.GetFileAttributesW(unicode(filepath))
        assert attrs != -1
        result = bool(attrs & 2)
    except (AttributeError, AssertionError):
        result = False
    return result

def main():
    print ('whatup')
    print(is_hidden('~/.jupyter'))
    print('hey')

然后从终端

$ ./makepass_jup.py
$ 

3 个答案:

答案 0 :(得分:5)

您没有在任何地方调用main功能。在文件末尾添加:

if __name__ == '__main__':
    main()
这里的

if语句是Python中的常见模式。 当作为模块导入文件时,它可以防止执行代码。 当Python解释器导入文件时,它会设置__name__变量。 如果从其他模块导入此文件,则__name__将设置为模块的名称。但是如果文件作为主程序执行,__name__变量将被设置为__main__,因此只有当文件作为程序执行时,才会执行该语句中的代码。

有关详细信息,请参阅问题What does if __name__ == “__main__”: do?的已接受答案。

答案 1 :(得分:4)

在Python中,main()函数不是入口点,与其他语言(如C或Java)不同。与其他人指出的一样,您的main()未在代码中的任何位置被调用。

您可以按如下方式在模块的顶层调用main()功能:

import ctypes
import os

(your functions)

main()

但是,当您使用python命令直接运行此命令或从其他位置导入此模块时,将评估顶级的所有内容。假设您的脚本的文件名是callee.py,并且您正在编写另一个名为caller.py的脚本,如下所示:

import callee

然后将评估callee.py顶级的所有陈述,包括main()。如果这不是您的意图,您可以通过检查__name__变量的值来检查是否从命令行直接调用了脚本。

if __name__ == '__main__':
    main()

如果直接从命令行调用脚本,__name__的值将为__main__。否则它将是模块的名称。在这种情况下,callee

答案 2 :(得分:1)

这个脚本只定义了一堆函数。您需要实际调用main()才能执行它。