2014-01-10 19 views
2

Быстрый вопрос о переносе исправлений из sys. В приведенном ниже коде я не понимаю data_dir = "." Этот data_dir используется в другом разделе для представления каталога файлов, но я не понимаю его. кусок. Я думал, что sys.argv будет передавать только одну награду, имя файла, которое можно использовать в main. Любая помощь будет оценена!Передача имени каталога из sys.argv в python

def main(name, data_dir ="."): 
    resp = Respondents() 
    resp.ReadRecords(data_dir) 
    print 'Number of respondents', len(resp.records) 

    preg = Pregnancies() 
    preg.ReadRecords(data_dir) 
    print 'Number of pregnancies', len(preg.records) 

if __name__ == '__main__': 
    main(*sys.argv) 
+0

'.' === текущий рабочий каталог. – devnull

+1

''. "' Используется для обозначения текущего каталога (это концепция Linux) и '' .. "' для родительского каталога. Попробуйте 'cd .' и' cd ..' в вашей системе. –

+0

@GrijeshChauhan Я думал, что можно использовать '.' и' ..' на Win & Mac тоже. – devnull

ответ

1

* before sys.argv заставляет список расширяться во все аргументы функции. Поэтому sys.argv [0] передается в имя, и если он существует, sys.argv [1] передается в data_dir, переопределяя «.».

0

Надеюсь, что этот пример помогает в понимании того, как работает sys.argv. data_dir = "" Параметр функции main() фактически является параметром по умолчанию i.e, если вы не передаете значение для data_dir, python принимает значение «.». который обозначает текущий каталог в UNIX.

>>> 
>>> def main(name, data_dir = "."): 
...  print name 
...  print data_dir 
... 
>>> import sys 
>>> sys.argv 
[''] 
>>> sys.argv[0] = "some_file_name" 
>>> 
>>> main(*sys.argv) 
some_file_name 
. 
>>> 
>>> sys.argv.append("my_data_dir") 
>>> main(*sys.argv) 
some_file_name 
my_data_dir 
>>> 
+0

Спасибо! Очень полезное объяснение! Получил это сейчас. – user3180797

0

"." является значением defaut для data_dir, это означает текущий каталог, в котором запускается программа.

Смежные вопросы