首页 > 解决方案 > 如何从另一个脚本执行代码并传递参数

问题描述

我有一个 python 代码try.py必须执行另一个名为prova.py的代码。我按照以下方式进行操作,并且可以正常工作:

exec(open("prova.py").read())

现在,我有一些变量需要传递给prova.py,我根据此处找到的内容进行了如下操作:https ://www.geeksforgeeks.org/exec-in-python/

var = {key:val for key, val in enumerate(lista_gp_todict)}
exec(open("prova.py").read(), var)

try.py没有给出错误,这意味着我现在编写 exec 的方式在语法方面仍然是正确的,但是在这个 exec 运行的那一刻,它在prova.py中给出了错误:

NameError: name 'var' is not defined

这意味着变量var内部的代码prova.py无法识别它,就像它没有被声明一样。事实上var没有声明到prova.py因为如果我通过它我假设它已经在那里。

我究竟做错了什么?

PS:我的操作系统是windows

标签: python-3.xwindows

解决方案


通常,您会使用该subprocess模块调用另一个脚本。

subprocess.run()接受一个可迭代的字符串作为参数,作为单独的进程运行。您可以完全按照从命令行调用它们的方式使用参数。

subprocess.run(['python', 'prova.py', my_argument])

由于您希望将 a 传递dict给您的脚本,您可以通过首先序列化 to 来实现json,这只是说“将其转换为字符串”的好方法。

既然var是你的dict,你就可以这样做。

subprocess.run(['python', 'prova.py', json.dumps(var)])

然后反序列化或“转换回dict”中的prova.py.

var = json.loads(sys.argv[1])

或者,import prova.py如果您打算从中使用的只是函数、类或变量,您也可以这样做。

例如,如果prova.py包含:

# prova.py
def my_func(var):
   # do some stuff to var

然后,您可以在主脚本中执行此操作:

import prova
var = {key:val for key, val in enumerate(lista_gp_todict)}
prova.my_func(var)

推荐阅读