我想将一些数据传递到另一个python脚本并在那里做一些事情。但是,如果我使用不同的参数同时运行脚本多次,则发送的数据会冲突。我如何分开它们?
示例代码:
main.py
import otherscript
list_a = [1,2,3] # from arguments
otherscript.append_to_another_list(list_a)
otherscript.py
another_list = []
def append_to_another_list(list):
another_list.append(list)
print(another_list)
如果我使用参数1,2,3和4,5,6同时运行main.py两次,它将在相同的列表中将它们都打印在[1,2,3,4,5,6] 。我希望我说清楚了
答案 0 :(得分:3)
其中有两次从OS命令行调用两次-例如bash
-您希望它们完全独立,不显示OP描述的行为。
另一方面,在单个Python解释器中,一个模块仅初始化一次,因此otherscript
模块(这是一个模块而不是脚本)中的列表会一直存在,并且一直存在附加到。
无论如何,也许最好的选择是最好的类。
class ListKeeper:
def __init__(self):
self.another_list = []
def append_to_another_list(self, list):
self.another_list.append(list)
print(another_list)
您的main.py
如下:
import otherscript
list_a = [1,2,3] # from arguments
keeper1 = otherscript.ListKeeper()
keeper1.append_to_another_list(list_a)
您可以根据需要创建任意数量的实例,所有实例彼此独立,并保持各自的状态。
答案 1 :(得分:1)
我只是按照以下步骤简化了您的main.py
import otherscript
import sys
list_a = [int(item) for item in sys.argv[1:]]
otherscript.append_to_another_list(list_a)
然后当我使用python3.7 main.py 1 2 3 && python3.7 main.py 4 5 6
一起运行它们时,我得到了输出
[[1, 2, 3]]
[[4, 5, 6]]
此外,如果打开相同的终端并运行两次append_to_another_list
命令,由于引用的是同一列表,输出将发生变化!
In [2]: import otherscript
In [3]: otherscript.append_to_another_list([1,2,3])
[[1, 2, 3]]
In [4]: otherscript.append_to_another_list([4,5,6])
[[1, 2, 3], [4, 5, 6]]