3

嗨,我对 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/

结果:未创建测试文件夹。

第二个文件可能有同样的问题。第二个文件目录.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 未创建。如果我收到一些错误消息,我可能会弄清楚但没有消息。任何帮助深表感谢。

4

3 回答 3

7

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

import os
import sys

def main():
    ...

if __name__ == '__main__':
    main()

有关此成语的更多详细信息,请参见此处

于 2013-04-07T20:17:19.047 回答
1

你实际上并没有打电话main。只需main()在脚本末尾添加就足够了,但通常使用以下成语:

if __name__ == '__main__':
    main()

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

将模块作为脚本执行

于 2013-04-07T20:18:23.580 回答
1

Python 不是 C 语言,def main也不是魔法。Python 程序没有预定义的执行入口点。您的代码所做的只是定义一个 main 函数(不运行它),因此 Python 定义main然后停止(根据您的要求)。

main()如果您希望它执行,您必须显式调用。你应该使用这个成语:

if __name__ == '__main__':
    main()

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

于 2013-04-07T20:21:19.877 回答