这个非常简单的代码让我疯狂。
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上使用“*”?
答案 0 :(得分:10)
尝试使用'*'
代替*
。您的shell通过cmdline args将*
的结果提供给程序,就像ls *
一样。
答案 1 :(得分:1)
获取文件名的另一种方法是使用glob模块:
>>> from glob import glob
>>> glob('*')
['file1.txt', 'file2.py', 'file3', ... ]
它的工作方式与ls
命令相同。