使用 python 中不同文件的命令行参数
Using command line args from different files in python
我最近发现(令我惊讶的是)您可以在文件中调用命令行参数,而不是在您输入时明确调用的文件中。
因此,您可以在命令行中 运行 python file1.py abc
,并使用 sys.argv[1] 从 file2.py 中获取字符串 'abc' 或file3.py.
我仍然觉得这不应该起作用,但我很高兴它起作用了,因为它为我省去了很多麻烦。
但现在我真的很感激关于 why/how 这有效的答案。我原以为 sys.argv[1] 对每个文件都是本地的。
至于how/why,sys
只导入一次(当python启动时)。导入 sys
时,它的 argv
成员会填充命令行参数。随后的 import
语句 return 相同的 sys
模块对象,因此无论您 import sys
来自哪里,您将始终获得相同的对象,因此 sys.argv
将始终无论您在应用程序中的何处引用它,都是相同的列表。
您是否应该在多个地方进行命令行解析是另一个问题。一般来说,我的回答是 "NO" 除非你只是为了在接下来的 2 或 3 天内编写一个脚本。任何你期望持续的东西都应该预先解析它(可能使用像 argparse
这样的强大的参数解析器)并从它的入口点将各种 functions/classes 所需的数据传递给它们。
我最近发现(令我惊讶的是)您可以在文件中调用命令行参数,而不是在您输入时明确调用的文件中。
因此,您可以在命令行中 运行 python file1.py abc
,并使用 sys.argv[1] 从 file2.py 中获取字符串 'abc' 或file3.py.
我仍然觉得这不应该起作用,但我很高兴它起作用了,因为它为我省去了很多麻烦。
但现在我真的很感激关于 why/how 这有效的答案。我原以为 sys.argv[1] 对每个文件都是本地的。
至于how/why,sys
只导入一次(当python启动时)。导入 sys
时,它的 argv
成员会填充命令行参数。随后的 import
语句 return 相同的 sys
模块对象,因此无论您 import sys
来自哪里,您将始终获得相同的对象,因此 sys.argv
将始终无论您在应用程序中的何处引用它,都是相同的列表。
您是否应该在多个地方进行命令行解析是另一个问题。一般来说,我的回答是 "NO" 除非你只是为了在接下来的 2 或 3 天内编写一个脚本。任何你期望持续的东西都应该预先解析它(可能使用像 argparse
这样的强大的参数解析器)并从它的入口点将各种 functions/classes 所需的数据传递给它们。