我刚刚开始编程,我正在使用A Byte of Python学习Python。我的模块章节有问题。我不是很了解模块,所以也许这是一个愚蠢的问题,但我复制并粘贴了输入,它返回了不同的输出。他建议的输入是
import sys
print('The command line arguments are:')
for i in sys.argv:
print i
print '\n\nThe PYTHONPATH is', sys.path, '\n'
这是输出:
$ python module_using_sys.py we are arguments
The command line arguments are:
module_using_sys.py
we
are
arguments
The PYTHONPATH is ['/tmp/py',
# many entries here, not shown here
'/Library/Python/2.7/site-packages',
'/usr/local/lib/python2.7/site-packages']
但是我使用相同输入的输出是不同的。这是:
pedro@pedro-Inspiron-3521:~/Desktop/python$ python modulo1.py
The command line arguments are:
modulo1.py
The PYTHONPATH is ['/home/pedro/Desktop/python', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
据我所知,当您编写import sys时,您正在制作内置模块,该模块与系统相关的内容可供使用。我也知道for循环语句遍历一个序列,在这种情况下,序列应该是存在的命令行参数。但是,它只显示modulo1.py,这是我保存我复制和粘贴的代码的文件的名称。我真的不了解pythonpath的事情,但根据我的研究,它是可能存在模块的目录列表。我使用gedit作为文本编辑器,使用ubuntu作为os和ubuntu的终端。我做错了什么?
答案 0 :(得分:2)
第一句话。
sys.argv
是传递给Python脚本的命令行参数列表(https://docs.python.org/2/library/sys.html)
当您运行$ python modulo1.py
时,modulo1.py
是您的第一个(也是唯一的)参数。这就是输出为modulo1.py
的原因。
但是在你的书中,它运行$python module_using_sys.py we are arguments
,这里python
是调用python的推荐。 module_using_sys.py
是传递给您计算机的第一个参数,we
是第二个,are
是第三个,arguments
是最后一个参数。
for
循环的作用是打印每个参数。
因此,如果您希望看到与图书中完全相同的输出,则应该:
.py
文件重命名为与图书中相同的名称第二个陈述。
请注意,您sys.path
的值与您所指的图书中sys.path
的值不同。这就是你看到不同输出的原因。
您对PYTHONPATH
的理解通常是正确的。有关PYTHONPATH
的详细信息,您可以查看以下答案:How to use PYTHONPATH或this official page