如何向Python中导入的脚本传递参数

8 投票
2 回答
9797 浏览
提问于 2025-04-18 09:28

我有一个脚本(script1.py),它的内容大致是这样的:

#!/bin/python

import sys

def main():
    print("number of command line options: {numberOfOptions}".format(numberOfOptions = len(sys.argv)))
    print("list object of all command line options: {listOfOptions}".format(listOfOptions = sys.argv))
    for i in range(0, len(sys.argv)):
        print("option {i}: {option}".format(i = i, option = sys.argv[i]))

if __name__ == '__main__':
    main()

我想在另一个脚本(script2.py)中导入这个脚本,并给它传递一些参数。这个脚本script2.py可能看起来像这样:

import script1

listOfOptions = ['option1', 'option2']
#script1.main(listOfOptions) insert magic here

我该如何将script2.py中定义的参数传递给script1.py的主函数,就像它们是命令行选项一样?

比如说,这样做在Python中算不算合适呢?:

import script1
import sys

sys.argv = ['option1', 'option2']
script1.main()

2 个回答

0

在编程中,我们常常会遇到一些问题,特别是在使用某些工具或库的时候。比如,有时候我们想要实现一个功能,但不知道该怎么做。这时候,我们可以去网上查找资料,比如在StackOverflow上提问或者搜索相关问题。

StackOverflow是一个程序员交流的平台,大家可以在这里分享自己的问题和解决方案。很多时候,其他人会遇到类似的问题,他们会把自己的解决办法写下来,供大家参考。

在提问的时候,最好把问题描述清楚,提供一些代码示例,这样别人才能更好地理解你的问题并给出帮助。

总之,遇到编程问题时,不要害怕去寻求帮助,利用好像StackOverflow这样的资源,可以让你更快地找到解决方案。

# script1.py
#!/bin/python

import sys

#main function is expecting argument from test_passing_arg_to_module.py code.
def main(my_passing_arg):
    print("number of command line options:  {numberOfOptions}".format(numberOfOptions = len(sys.argv)))
    print("list object of all command line options: {listOfOptions}".format(listOfOptions = my_passing_arg))
    print(my_passing_arg)
if __name__ == '__main__':
    main()

#test_passing_arg_to_module.py
import script1
my_passing_arg="Hello world"
#calling main() function from script1.py code.
#pass my_passinga_arg variable to main(my_passing_arg) function in scritp1.py. 
script1.main(my_passing_arg)
##################
# Execute script
# $python3.7 test_passing_arg_to_module.py
# Results.
# number of command line options:  1
# list object of all command line options: Hello world
# Hello world


1

分开命令行解析和被调用的函数

为了让你的代码更好用,最好把执行的函数和命令行解析分开写。

scrmodule.py

def fun(a, b):
    # possibly do something here
    return a + b

def main():
    #process command line argumens
    a = 1 #will be read from command line
    b = 2 #will be read from command line
    # call fun()
    res = fun(a, b)
    print "a", a
    print "b", b
    print "result is", res

if __name__ == "__main__":
    main()

从其他地方重用它

from scrmodule import fun

print "1 + 2 = ", fun(1, 2)

撰写回答