1

我目前正在通过Learning Python the Hard Way工作,这对我来说可能有点快。我已经输入了以下代码以及相应的文件。在 py 文件中,我写道:

#!/usr/bin/python

from sys import argv

script, filename = argv

txt = open(filename)

print "Here's your file %r:" % filename
print txt.read()

print "Type the filename again:"
file_again = raw_input("> ")

txt_again = open(file_again)

print txt_again.read()

为了运行它,我写道:python script.py readme.txtwhich run the code。

但是,我不太了解这里的过程:

  • 为什么#!/usr/bin/python必须在文件的顶部
  • 什么是sys import argv
  • 什么是script, filename = argv
  • .read()内置函数吗?
4

4 回答 4

3
  1. #!/usr/bin/python是所谓的 Shebang,向操作系统内核提示它是一个 Python 脚本,应该使用给定的 Python 二进制文件执行。因此,如果您chmod +x是脚本,您甚至可以使用./script.py readme.txt.

  2. from sys import argvargvsys模块直接导入我们的命名空间的命令。所以我们可以使用argv来访问它而不是sys.argv. 如果我们只使用一次,最好只import sys通过 eg 访问其中的所有内容sys.argv。您可以在 Python 文档和/或教程中找到相关信息。

  3. script, filename = argv是的简写

    script = argv[0]
    filename = argv[1]
    

    只要argv包含恰好 2 个元素。您可以在 Python 文档和/或教程中找到相关信息。

  4. file.read()确实是内置的,但作为文件对象方法,而不是作为函数本身。

于 2013-08-04T21:52:00.617 回答
2

1) 类 Unix 约定。它允许在读取文件的第一行后立即确定如何处理文件。

2)表示仅从名为的模块from sys import argv导入argvsys

3) a,b = 1,2 将 1 分配给 a,将 2 分配给 b。如果在 上有一个_iterable_对象,RHS那么这样的构造是等价的:

script, filename = argv 

===

script = argv[0]
filename = argv[1]

4) 是的。严格来说可能不是内置的——它只是 Python 的标准输入输出模块之一中提供的一个函数。

于 2013-08-04T21:49:56.030 回答
2

答案:

1) #!/usr/bin/python 适用于 UNIX 用户,它显示 python 在哪里可以找到某些文件。(为什么人们在 Python 脚本的第一行写 #!/usr/bin/env python?

2) sys import argv 是参数 [readme.txt] ( http://www.tutorialspoint.com/python/python_command_line_arguments.htm )中的文件

3) script, filename = argv Script 和 Filename [新变量] 采用来自 argv 的值。

4) 是的,.read() 是一个内置函数。( http://www.diveintopython.net/file_handling/file_objects.html )

谷歌是你在这方面的朋友......

于 2013-08-04T21:47:31.840 回答
2

它将把你的#!/usr/bin/pythonpython 脚本变成一个可执行文件,一个特殊的 unix 技巧。可执行脚本通常以字符 #! 开头的行开始。(“hash bang”),然后是您机器上 Python 解释器的路径。然后通过将模式更改为该特定脚本文件的 +x,您只需调用名称即可在提示符下执行它。由于不同机器的路径可能不同,您可以使用 unix "env" 解决方法:#!/usr/bin/env python 这将允许 env 程序定位 python 解释器并执行代码

From modulename import something 用于导入模块,但我们只是从模块 sys.import 导入“argv”属性。From 就像 import 一样,但在这种情况下它复制模块的属性 (argv) 为您做了更多的工作,因此它们成为接收脚本中的简单变量。

script, filename = argv 将简单地将 argv[0] 和 argv[1] 分别分配给 script 和 filename。

最后,file.read 是文件对象的内置方法。

于 2013-08-04T21:54:50.057 回答