#python
#python
Вопрос:
этот очень простой код сводит меня с ума.
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?
Ответ №1:
Попробуйте использовать '*'
вместо *
. Ваша оболочка передает результаты *
в программу с помощью аргументов командной строки, точно так же, как ls *
.
Комментарии:
1. Чтобы было понятно, Python этого не делает; это делает ваша оболочка. Одинарные кавычки вокруг аргумента не позволяют оболочке обработать его перед передачей вашему скрипту.
Ответ №2:
Другой способ получить имена файлов — использовать модуль glob:
>>> from glob import glob
>>> glob('*')
['file1.txt', 'file2.py', 'file3', ... ]
Это работает точно так же, как ls
команда.
Комментарии:
1. Заданный вопрос заключался в том, как предотвратить перенос имен файлов на
argv
, а не как сделать это другим способом. 🙂