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

6

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

3
因为文件扩展名并没有实际意义。如果一个文件是有效的 Python 文件,那么无论扩展名是什么,它都是有效的 Python 文件。 - Morgan Thrapp
4个回答

7
Python知道这是一个Python文件,因为你运行了python <filename>。对于电脑来说,文件扩展名并不是很重要。文件扩展名可以帮助人类记住文件的种类,并且使计算机自动确定使用哪个程序打开特定的文件变得更容易。
但实际上,如果你想忽略它们,文件扩展名就没有什么意义了。如果你告诉Python打开一个文件,它会尝试打开那个文件。它不关心文件名是什么,唯一重要的是文件是否包含有效的Python代码。

3
我不知道Python在Windows上的表现,因为我总是在Linux上使用它,但我能理解这会让Windows用户感到惊讶。Python在文件扩展名的使用上非常类似于Linux——最多只能作为提示,但通常可以完全忽略。对于那些只在Windows上长大并习惯了操作系统更加依赖文件扩展名、认为其确实具有含义的人来说,这可能是一个陌生的概念。 - Two-Bit Alchemist
1
@Two-BitAlchemist - 在Windows上也是一样的。扩展名只是指示默认情况下应该打开文件的程序。大警告只是为了避免不得不帮助非高级用户弄清楚为什么他们的Word文件不再在Word中打开。 - TigerhawkT3

2
如果您使用的是Windows系统并且想要了解实际的Python可执行文件,那么您可以在文件名后加上".py"扩展名来指定Python将使用哪个可执行文件。
例如,在文档这里中,您可以通过命令提示符运行以下命令来关联Python脚本: assoc .py=Python.File 然后,如果您想使用pythonw.exe而不是python.exe来执行Python脚本,则可以使用以下命令更改可执行文件:
ftype Python.File=C:\Path\to\pythonw.exe "%1" %*

2

Python解释器以及其他程序/解释器等(例如ruby,bash等)并不关心文件扩展名,它们只是尝试执行文件内容,并期望其符合该程序使用的语言的语法,否则会抛出适当的错误。

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

puts 'Hello in ruby'

您可以这样运行它:

$ ruby hello.hello
Hello in ruby

除了您的示例之外,还请注意您也可以不使用任何扩展名运行相同的文件,也不需要在命令行中指定运行文件的程序。然而,在这种情况下,您需要在文件本身中指定,如下所示:
#!/usr/bin/env python
print 'Hello world!'

并运行它

$ ./hello
Hello world!

1

pytxt和许多其他文件都是技术上的"文本"文件。然而,扩展名作为用户和操作系统区分不同程序对应哪个文件的方法。如果您使用Mac或Windows,则有时可能会出现一个屏幕 打开方式,在该屏幕上您可以选择默认程序来打开文件。为了知道应该在哪个文件上使用哪个程序,操作系统使用文件扩展名。

您可以使用文件扩展名以了解文件的用途。 py 文件已知运行为 Python,您需要使用 Microsoft Word 打开 .docx 文件。但是,如果这两个文件都是文本文件怎么办?如果在Python中打开Microsoft Word文件,则可能会遇到一些严重的编码错误:P


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接