从unix调用python的基本帮助

时间:2013-04-07 20:14:45

标签: python unix

嗨我对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。 如果我收到一些错误消息,我可能会想出来,但没有消息。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:7)

您正在定义一个名为main的函数,但从不调用它。做:

import os
import sys

def main():
    ...

if __name__ == '__main__':
    main()

有关此成语的详细信息,请参阅here

答案 1 :(得分:1)

您实际上并未致电main。只需在脚本末尾添加main()就足够了,但通常会使用这个习语:

if __name__ == '__main__':
    main()

如果脚本是直接执行的话,这将调用main,而不只是从另一个模块导入。

请参阅executing modules as scripts

答案 2 :(得分:1)

Python不是C而def main不是魔术。 Python程序没有预定义的执行入口点。您的所有代码都在定义一个主函数(不运行它),因此Python定义main然后停止(按照您的要求)。

如果您希望执行main(),则必须明确调用if __name__ == '__main__': main() 。你应该使用这个成语:

__name__

__name__是在模块级别创建的包含模块名称的魔术变量。如果'__main__'main(),则表示当前模块未导入但直接运行。这个习惯用法允许你使用Python文件作为一个模块(你可以导入的东西 - main()不应该自动运行)和脚本({{1}}应该自动运行)。

相关问题