我是新手在终端中运行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
$
答案 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()
才能执行它。