1

这是我的问题:在阅读一本关于 python 网络编程的书时,我偶然发现了这段代码:

import socket, sys
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

if sys.argv[1:] == ['server']:
    s.bind('127.0.0.1', PORT)
    ...
    ... 

等等。我的问题是 if 语句是否检查 sys.argv 列表中的任何元素(第一项除外)是否与“服务器”进行比较。我尝试在 IDLE for Python 3.2 中执行此操作,但没有成功。这本书是为 python 2.7 设计的,所以我也试过了,但它仍然有效。

4

4 回答 4

3

不,这在任何版本的 Python 中都不起作用。唯一要做的就是检查sys.argv从位置 1 开始只有一个元素,即'server'.

于 2013-08-29T13:37:17.313 回答
3

不,它检查切片 1:形成的列表是否等于列表['server']

于 2013-08-29T13:36:48.643 回答
3

sys.argv[0]是程序的名称,它被剥离。sys.argv[1:]- 提供给程序的所有命令行参数。

if语句检查您的脚本是否只收到一个参数server

于 2013-08-29T13:37:12.147 回答
2

'server'您可以使用此构造检查参数:

if 'server' in sys.argv[1:]:
    do_something()

将来,请使用argparse获取命令行参数。

于 2013-08-29T14:01:06.797 回答