2014-01-10 33 views
2

关于从sys传递arugments的快速问题。在下面的代码中,我不明白data_dir =“。”这data_dir用于另一节代表一个文件目录,但我不明白=“。”片。我曾经认为sys.argv只会传递一个arugment,它可以在main函数中使用。任何帮助,将不胜感激!在python中从sys.argv传递目录名

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

*之前的sys.argv导致列表扩展到函数的所有参数。因此sys.argv [0]被传递给name,如果存在,sys.argv [1]被传递给data_dir,覆盖“。”。

0

希望这个例子有助于理解* sys.argv的工作原理。 DATA_DIR = “”。 main()函数的参数实际上是一个默认参数,即,如果您没有为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

“。”是data_dir的默认值,它表示程序运行的当前目录。