2012-07-29 41 views
0

我是一个python新手。为了以可理解的方式提出我的问题,我创建了两个脚本。一个脚本被命名为:called_script.py其他脚本被命名为:calling_script.py如何防止导入模块“导入”sys.argv [1:]

下面两行是在called_script.py代码

import sys 
print str(sys.argv[1]) + '\n\n' + str(dir(sys.argv[1])) 

下面两行是在calling_script.py代码

import sys 
import called_script 

如果我喂 '富' 作为命令行参数 'calling_script.py',foo将显示为sys.argv中[1]在 'called_script.py'

是否有任何共同de,我可以添加到'called_script.py',这样'called_script.py'可以确定 sys.argv [1]是否从命令行传递给它,或者sys.argv [1]是否从它传递给它'main'?

此外,我很想知道是否有可能阻止例如sys.argv [1]从传递到导入的模块,并且我可以在这里找到关于此主题的一些阅读。

谢谢你的帮助。非常感谢。

     Marc 

回答

1

有没有办法,我可以添加到“called_script.py”让 “called_script.py”能确定sys.argv中是否从命令行传递给 它[1]的任何代码,或者sys.argv [1]是否从 'main'传递给它?

从根本上说,没有,因为命令行参数不传递给模块,他们传递给Python的,这使他们在sys.argv。由于所有的模块共享相同的sys,他们都会看到相同的sys.argv,就是这样。

这就是说,你可以采取的__name__,它被设置为__main__只对主脚本的优势:

~/coding$ python calling_script.py fred 
called_script says __name__ is: called_script 
calling_script says __name__ is: __main__ 

所以,你可以使用类似

args = sys.argv if __name__ == '__main__' else [whatever_you_want] 

,然后用args来获得相当于模块特定的sys.argv。同样,您可以在calling_script.py开始的__name__分支,然后修改sys(ick)中的一个。

但是一般来说,无论如何,您不应该在主程序之外的任何地方使用sys.argv。如果您需要在多个位置访问sys.argv,则您的界面可能与您的例程不够分离。