0

我是蟒蛇新手。为了以易于理解的方式提出我的问题,我创建了两个脚本。一个脚本名为:calling_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 将在“calling_script.py”中显示为 sys.argv[1]

是否有任何代码可以添加到“called_script.py”,以便“called_script.py”可以确定 sys.argv[1] 是否从命令行传递给它,或者 sys.argv[1] 是否传递给它它来自'主要'?

另外,我很想知道是否有可能阻止例如 sys.argv[1] 从main传递到导入的模块,以及在哪里可以找到有关该主题的一些读物。

感谢您的任何帮助。非常感谢。

                      Marc
4

1 回答 1

1

是否有任何代码可以添加到“called_script.py”,以便“called_script.py”可以确定 sys.argv[1] 是否从命令行传递给它,或者 sys.argv[1] 是否传递给它它来自“主要”?

从根本上说,不,因为命令行参数没有传递给modules,它们被传递给 Python,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。同样,您可以在stash__name__的一开始就进行分支,然后修改(ick) 中的那个。calling_script.pysys.argvsys

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

于 2012-07-29T02:06:36.343 回答