我是一个蟒蛇新手。为了以易于理解的方式提出我的问题,我创建了两个脚本。一个脚本命名为:called_script.py另一个脚本名为:calling_script.py
以下两行是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
如果我将'foo'作为命令行参数提供给'calling_script.py',foo将在'called_script.py'中显示为sys.argv [1]
是否有任何代码可以添加到'called_script.py'以便'called_script.py'可以确定 sys.argv [1]是否从命令行传递给它,或者sys.argv [1]是否从' main '传递给它?
另外,我很想知道是否可以阻止例如sys.argv [1]从 main 传递到导入的模块,并且我可以在这里找到一些阅读主题。
感谢您的帮助。非常感谢。
Marc
答案 0 :(得分:1)
是否有任何代码可以添加到'called_script.py'中 'called_script.py'可以确定是否传递了sys.argv [1] 它来自命令行,或者sys.argv [1]是否从它传递给它 '主'?
从根本上说,不,因为命令行参数没有传递给 modules ,所以它们被传递给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
获取特定于模块的__name__
。同样,您可以在calling_script.py
开始时sys.argv
分支,隐藏sys
,然后修改sys.argv
(ick)中的那个。
但一般来说,您无需在主程序之外的任何地方使用sys.argv
。如果您需要在多个位置访问{{1}},那么您的界面可能与您的例程分离不足。