我目前正在通过学习Python艰难的方式工作,对我来说可能会有点快。我输入了以下代码,以及相应的文件。在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.txt
运行代码。
但是,我不太明白这个过程:
#!/usr/bin/python
必须位于文件顶部sys import argv
script, filename = argv
.read()
是内置函数吗?答案 0 :(得分:3)
#!/usr/bin/python
就是所谓的Shebang,这是对OS内核的暗示,它是一个Python脚本,应该使用给定的Python二进制文件执行。因此,如果您chmod +x
脚本,您甚至可以使用./script.py readme.txt
来调用它。
from sys import argv
是一个将argv
模块中的sys
直接导入我们的命名空间的命令。因此,我们可以使用argv
来代替sys.argv
。如果我们只使用一次,那么只需import sys
并访问内部的所有内容可能会更好。 sys.argv
。您可以在Python文档和/或教程中找到相关内容。
script, filename = argv
是
script = argv[0]
filename = argv[1]
只要argv
包含2个元素。您可以在Python文档和/或教程中找到相关内容。
file.read()
确实是内置的,但作为文件对象方法,不是作为这样的函数。
答案 1 :(得分:2)
数目:
1)#!/ usr / bin / python适用于UNIX用户,它显示了python在哪里可以找到某些文件。 (Why do people write #!/usr/bin/env python on the first line of a Python script?)
2)sys import argv是参数中的文件[readme.txt](http://www.tutorialspoint.com/python/python_command_line_arguments.htm)
3)script,filename = argv Script和Filename [new variables]采用argv中的值。
4)是的,.read()是一个内置函数。 (http://www.diveintopython.net/file_handling/file_objects.html)
谷歌是你的朋友......
答案 2 :(得分:2)
1)类似Unix的约定。它允许在读取第一行文件后立即确定如何处理文件。
2)from sys import argv
表示仅从名为argv
sys
3)a,b = 1,2将1分配给a,将2分配给b。如果_iterable_
上有RHS
个对象,则此类构造是等效的:
script, filename = argv
===
script = argv[0]
filename = argv[1]
4)是的。也许不是内置严格来说 - 它只是Python标准输入输出模块中提供的一个函数。
答案 3 :(得分:2)
#!/usr/bin/python
会将你的python脚本变成可执行文件,这是一个特殊的unix技巧。可执行脚本通常以一个以字符#开头的行开头! (“hash bang”),然后是机器上Python解释器的路径。然后通过将模式更改为该特定脚本文件的+ x,您只需调用名称即可在提示符上执行它。由于不同机器的路径可能不同,因此可以使用unix“env”解决方法:
#!/ usr / bin / env python
这将允许env程序找到python解释器并执行代码
从modulename导入的东西用于导入模块,但我们只从模块sys导入“argv”属性。 From就像import一样,但在这种情况下复制模块的属性(argv)会为你做更多工作,这样它们就会成为收件人脚本中的简单变量。
script,filename = argv将分别简单地将argv [0]和argv [1]分配给脚本和文件名。
最后,file.read是文件对象的内置方法。