Python 如何执行没有.py 扩展名的文件?

How does Python execute files without the .py extension?

Python 如何能够执行没有 .py 扩展名的文件?下面的两个文件都有效。 Python 怎么知道 hello.txt 是一个 Python 文件?

hello.py:

print "hello world"

hello.txt:

print "hello world"
$ python hello.txt
hello world

$ python hello.py
hello world

Python 知道它是一个 Python 文件,因为你 运行 python <name of file>。文件扩展名实际上对计算机来说并不重要。文件扩展名帮助你,人类,记住什么类型的文件。它们还使计算机更容易自动找出用于特定文件的程序。

但实际上,如果您想忽略文件扩展名,它们根本无关紧要。如果您告诉 Python 打开文件,它会尝试打开该文件。它不关心文件的名称是什么;重要的是文件是否包含有效的 Python 代码。

如果您在 Windows 上询问实际的 Python 可执行文件,那么您可以指定哪个可执行文件 Python 将与 .py 扩展一起使用。

例如,根据文档 here,您可以 运行 关联 Python 脚本,如下所示:

assoc .py=Python.File

然后,如果您想使用 pythonw.exe 而不是 python.exe 来执行您的 Python 脚本,您可以使用以下命令更改可执行文件:

ftype Python.File=C:\Path\to\pythonw.exe "%1" %*

python 解释器,以及其他 programs/interpreters/etc(即 ruby、bash 等),并不真正关心文件扩展名,它们只需尝试执行文件内容并期望它符合此类程序使用的语言的语法,否则会抛出适当的错误。

以 ruby 为例,考虑下一个文件 hello.hello:

puts 'Hello in ruby'

你可以运行它为:

$ ruby hello.hello
Hello in ruby

除了您的示例,请注意,您还可以 运行 完全没有扩展名的相同文件,并且无需在命令行中指定应 运行 您的文件的程序;但是在这种情况下,您需要在文件本身中指定 so,如下所示:

#!/usr/bin/env python
print 'Hello world!'

和运行它

$ ./hello
Hello world!

pytxt 和许多其他文件在技术上都是 "text" 文件。但是,扩展名是用户和 OS 区分哪个文件适用于哪些程序的一种方式。如果您使用 Mac 或 Windows,有时您可能会看到一个屏幕 open with,您可以在其中选择默认程序来打开文件。为了知道在什么文件上使用什么程序,操作系统使用文件扩展名。

您可以使用文件扩展名来了解哪个文件的作用。 py 文件被 运行 识别为 Python 并且您启动 .docx 作为 Microsoft Word。但是如果这两个都是文本文件呢?如果在 Python 中打开 Microsoft Word 文件,您可能会遇到一些严重的编码错误:P