2011-11-10 32 views
1

我有一个Python脚本,我想知道如何使它可执行;换句话说,我怎样才能通过使用像bash这样的shell来运行它。如何使可执行文件在shell中使用 - Python

我知道第一件事就是坚持在第一行#! /usr/bin/env python但我需要例如功能是在一个特定的顺序(即,主顶部或底部)。还有什么我需要保留我的python文件扩展名为.py(我可以只调用功能Dosomething?)。

简而言之,您能否提供一个简单的指南,是否有人需要考虑制作Python文件可执行文件时需要考虑的重要因素?

回答

2

这是我如何制作可执行脚本。它不考虑eggs或类似的东西。这只是一个简单的脚本,我希望能够执行。我假设你正在使用Linux。

#! /usr/bin/env python 
import sys 


def main(): 
    # 
    # Do something ... Whatever processing you need to do, make it happen here. 
    # Don't shove everything into main, break it up into testable functions! 
    # 
    # Whatever this function returns, is what the exit code of the interpreter, 
    # i.e. your script, will be. Because main is called by sys.exit(), it will 
    # behave differently depending on what you return. 
    # 
    # So, if you return None, 0 is returned. If you return integer, that 
    # return code is used. Anything else is printed to the console and 1 (error) 
    # is returned. 
    # 
    if an_error_occurred: 
     return 'I\'m returning a string, it will be printed and 1 returned' 

    # Otherwise 0, success is returned. 
    return 0 

# This is true if the script is run by the interpreter, not imported by another 
# module. 
if __name__ == '__main__': 
    # main should return 0 for success, something else (usually 1) for error. 
    sys.exit(main()) 

现在,如果您的权限设置正确,您可以执行此脚本。

有一件事要认识到,当你的脚本被处理时,每一行都在解释器中执行。无论处理器如何“得到它”,情况都是如此。这就是将脚本作为模块导入并作为脚本执行,基本上它们都是相同的,因为它们都执行模块的每一行。

一旦您意识到您的脚本在运行时只是执行,您会意识到函数的顺序并不重要。函数声明是一个函数声明。这是当你致电重要的功能。

所以,一般情况下,你的脚本的布局看起来像这样

def func1(): 
    pass 
def func2(): 
    pass 
def main(): 
    return 0 

if __name__ == '__main__': 
    sys.exit(main()) 

你创建你首先要使用的功能,那么你使用它们。希望能帮助到你。

+0

血腥地狱!我就是这个意思!非常感谢杰米,伟大的东西,很好的解释!它的确如此!队友的欢呼声! – eikonal

0

的唯一的事情(像你说的吧),包括:

#! /bin/env python 

在第一行。甚至不强制,但建议。 之后,你可以把它写:

python [filename].py 

在终端或在bash文件。

0

你也得给它执行权限:

chmod u+x yourfile.py 
0

删除第一空间。也就是,

#!/usr/bin/env python 

应该是文件的第一行。然后,确保您设置文件的权限可执行:

chmod u+x your_script.py 

Python脚本按顺序执行。如果你拥有一个充满功能的文件,通常的做法是有东西,看起来像这样在你的文件的末尾:

if __name__ == '__main__': 
    main() 

当主()开始你的脚本的执行。我们这样做的原因,而不是对main()的纯粹调用,这样可以让您的脚本在不做任何修改的情况下就像模块一样工作;如果你只有一行main(),你的模块会执行脚本的main。 if语句只是检查脚本是否在__main__命名空间中运行,即它正在作为脚本运行。

0

您需要添加sha bang如您所述,例如,

#!/usr/bin/python 

#!/usr/bin/env python 

在你的文件的第一行,你需要使其可执行运行

chmod +x Dosomething 

您不需要做任何事情,特别是文件名称可以是任何东西,包括Dosomething。您PATH可能不包括该文件所在的目录,所以你应该这样运行了它(假设你的当前工作目录是文件):

./Dosomething 
+0

使用'#!/usr/bin/env python'在python没有安装在'/ usr/bin'但是在其他目录下的情况下更灵活。 – Lycha

+0

确实。谢谢,Lycha! –

0

您的代码应遵循模板

# any functions I want to define, and will be accessible when imported as module 
# or run from command line 
... 

if __name__ == '__main__': 
    # things I want to do only when I run it from the command line 
    ... 

如果您希望能够运行它,而不必使用python fileName.py而只是./fileName.py那么你会希望你的文件的第一行

#!/usr/bin/env python 

而且使用户对文件的可执行至少

chmod u+x fileName.py 

如果不添加.py扩展名到你的文件,那么它仍然会在命令行中运行的...而不是由其他模块导入的。

+0

@eddieantonio所以我的文件当然是可执行的,第一行是'#!/ usr/bin/env python',但没有任何反应(它可以从shell python中运行)。使用if __name__ =='__main__':def main()给我一个错误(基本上我必须定义main)。我是否必须使用顶部的主要功能来组织脚本? – eikonal

0
  1. #!/usr/bin/python在第一线
  2. 您可以命名您的Python脚本东西,如:myPythonScript(不,你并不需要保存.py扩展名)
  3. chmod +x myPythonScript
  4. 运行:./myPythonScript

实施例:myPythonScript

#!/usr/bin/python 
print "hello, world!" 
相关问题