嗨我对python很新,所以我一直在玩它。我最近为我正在处理的某个进程创建了2个文件,它们在运行python时似乎正在工作,但在unix命令行中编写python name.py argv时什么都不做。这可能是基本的东西,我会很感激一些帮助。 第一个文件(make_dir.py)
import os
import sys
def main():
directory = sys.argv[1]
if not os.path.exists(directory):
os.makedirs(directory)
在unix终端我写
python make_dir.py /home/user/Python/Test/
结果:未创建测试文件夹。
第二个文件可能存在同样的问题。 第二个文件directory.py
import sys
import os
def main():
os.chdir(sys.argv[1])
File = open(sys.argv[2] , 'w')
File.write(sys.argv[3])
File.close()
在unix终端:
python directory.py /home/user/Python/TEST/ a.log "this is a test"
未创建a.log。 如果我收到一些错误消息,我可能会想出来,但没有消息。非常感谢任何帮助。
答案 0 :(得分:7)
您正在定义一个名为main
的函数,但从不调用它。做:
import os
import sys
def main():
...
if __name__ == '__main__':
main()
有关此成语的详细信息,请参阅here。
答案 1 :(得分:1)
您实际上并未致电main
。只需在脚本末尾添加main()
就足够了,但通常会使用这个习语:
if __name__ == '__main__':
main()
如果脚本是直接执行的话,这将调用main
,而不只是从另一个模块导入。
答案 2 :(得分:1)
Python不是C而def main
不是魔术。 Python程序没有预定义的执行入口点。您的所有代码都在定义一个主函数(不运行它),因此Python定义main
然后停止(按照您的要求)。
如果您希望执行main()
,则必须明确调用if __name__ == '__main__':
main()
。你应该使用这个成语:
__name__
__name__
是在模块级别创建的包含模块名称的魔术变量。如果'__main__'
为main()
,则表示当前模块未导入但直接运行。这个习惯用法允许你使用Python文件作为一个模块(你可以导入的东西 - main()
不应该自动运行)和脚本({{1}}应该自动运行)。