argv 列出目录文件

1 投票
2 回答
651 浏览
提问于 2025-04-16 17:46

这段非常简单的代码让我感到很困惑。

import sys,string,socket  

maquina = sys.argv[1]
texto = string.join(sys.argv[2:], " ")
print '['+maquina+']' 
print '['+texto+']'

mysock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
if  maquina == '*':
    for ip in range(18,254):
        mysock.sendto( texto, ('192.168.0.'+str(ip),8090) )
else:
    mysock.sendto( texto, (maquina,8090))
mysock.close()

当我输入

python send.py 192.168.0.135 several strings 

输出是:

[192.168.0.135]
[several strings]

但是如果我输入

python send.py * several strings

我得到的是:

[ajax]
[ajustaprofile.py build dia2django.py djangoajax django-cube django-evolution django_excel_templates-0.1 Doc google_appengine httpd.conf imagens jre1.5.0_08 lib list_mailbackup.py luma models.py netsend.py pip-log.txt reverse.py share testparamet.py tnsnames.ora util virttool-0.1 xlrd-0.7.1 xlutils-1.4.1 xlwt-0.7.2 several lines]

这是我当前目录下的文件列表!Python会把“*”这个符号转化为当前目录里的文件。

我试着通过这个链接做作业,但我一点头绪都没有。

http://docs.python.org/library/sys.html http://www.faqs.org/docs/diveintopython/kgp_commandline.html

我该如何在argv中使用“*”呢?

2 个回答

1

获取文件名的另一种方法是使用 glob 模块:

>>> from glob import glob
>>> glob('*')
['file1.txt', 'file2.py', 'file3', ... ]

它的工作方式和 ls 命令一样。

10

试着用 '*' 代替 *。你的命令行会把 * 的结果通过命令行参数传给程序,就像你输入 ls * 一样。

撰写回答