如何使可执行文件在shell-Python中使用

如何使可执行文件在shell-Python中使用,python,shell,executable,Python,Shell,Executable,我有一个Python脚本,我想知道如何使其可执行;换句话说,我如何使用类似于bash的shell来运行它 我知道第一件事就是坚持第一行/usr/bin/env python,但我是否需要将函数按特定顺序排列(例如,主函数在顶部或底部)。此外,我还需要保留python文件的扩展名.py(我可以调用函数Dosomething?) 简而言之,您能否提供一个简单的指南,让Python文件可执行时必须考虑的要点?唯一的事情(就像您所说的)是包括: #! /bin/env python 在第一行。甚至不是

我有一个Python脚本,我想知道如何使其可执行;换句话说,我如何使用类似于bash的shell来运行它

我知道第一件事就是坚持第一行/usr/bin/env python,但我是否需要将函数按特定顺序排列(例如,主函数在顶部或底部)。此外,我还需要保留python文件的扩展名.py(我可以调用函数
Dosomething
?)

简而言之,您能否提供一个简单的指南,让Python文件可执行时必须考虑的要点?

唯一的事情(就像您所说的)是包括:

#! /bin/env python
在第一行。甚至不是强制性的,而是推荐的。 之后,你可以称之为写作:

python [filename].py
在终端或bash文件中。

唯一的事情(如您所说)是包括:

#! /bin/env python
在第一行。甚至不是强制性的,而是推荐的。 之后,你可以称之为写作:

python [filename].py

在终端或bash文件中。

您还必须授予它执行权限:

chmod u+x yourfile.py

您还必须授予it执行权限:

chmod u+x yourfile.py

删除第一个空格。就是

#!/usr/bin/env python
应该是文件的第一行。然后,确保使用以下选项将文件的权限设置为可执行:

chmod u+x your_script.py
Python脚本按顺序执行。如果您有一个充满函数的文件,通常的做法是在文件的末尾有如下内容:

if __name__ == '__main__':
    main()

main()开始执行脚本。我们之所以这样做,而不是简单地调用main(),是因为这样可以使脚本像模块一样运行,而无需任何修改;如果只有一行名为main(),则模块将执行脚本的main。if语句只检查脚本是否在_umain_uu名称空间中运行,即它作为脚本运行。

删除第一个空格。就是

#!/usr/bin/env python
应该是文件的第一行。然后,确保使用以下选项将文件的权限设置为可执行:

chmod u+x your_script.py
Python脚本按顺序执行。如果您有一个充满函数的文件,通常的做法是在文件的末尾有如下内容:

if __name__ == '__main__':
    main()
main()开始执行脚本。我们之所以这样做,而不是简单地调用main(),是因为这样可以使脚本像模块一样运行,而无需任何修改;如果只有一行名为main(),则模块将执行脚本的main。if语句只检查脚本是否在_umain_uu名称空间中运行,即它是作为脚本运行的。

您需要按照描述添加sha bang,例如

#!/usr/bin/python

作为文件的第一行,您需要通过运行

chmod +x Dosomething
您不需要执行任何其他操作,特别是文件名可以是任何内容,包括
Dosomething
。您的
路径
可能不包括文件所在的目录,因此您应该这样运行它(假设您当前的工作目录是文件所在的目录):

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

#!/usr/bin/python

作为文件的第一行,您需要通过运行

chmod +x Dosomething
您不需要执行任何其他操作,特别是文件名可以是任何内容,包括
Dosomething
。您的
路径
可能不包括文件所在的目录,因此您应该这样运行它(假设您当前的工作目录是文件所在的目录):


您的代码应该遵循模板

# 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扩展名,那么它仍然可以从命令行运行。。。但其他模块不可导入。

您的代码应遵循模板

# 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扩展名,那么它仍然可以从命令行运行。。。但不可由其他模块导入

  • 放置
    #/第一行中的usr/bin/python
  • 您可以将python脚本命名为任何名称,例如:
    myPythonScript
    (不,您不需要保留.py扩展名)
  • chmod+x myPythonScript
  • 运行它:
    /myPythonScript
  • 示例:myPythonScript

    #!/usr/bin/python
    print "hello, world!"
    
  • 放置
    #/第一行中的usr/bin/python
  • 您可以将python脚本命名为任何名称,例如:
    myPythonScript
    (不,您不需要保留.py扩展名)
  • chmod+x myPythonScript
  • 运行它:
    /myPythonScript
  • 示例:myPythonScript

    #!/usr/bin/python
    print "hello, world!"
    

    这就是我制作可执行脚本的方法。它不考虑鸡蛋或类似的东西。这只是一个我希望能够执行的简单脚本。我假设您正在使用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())
    
    现在,如果权限设置正确,就可以执行此脚本

    要实现的一件事是,在处理脚本时,每一行都会在解释器中执行。不管处理器如何“获取”,这都是事实。也就是说,将脚本作为模块导入和作为脚本执行两者的工作原理基本相同,因为它们都执行模块的每一行

    一旦您意识到脚本只是在运行时执行,您就会意识到函数的顺序并不重要。函数声明就是函数声明。当你调用重要的函数时