python-3.x - 如何从另一个脚本执行代码并传递参数
问题描述
我有一个 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
解决方案
通常,您会使用该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)
推荐阅读
- java - 是否可以使用 createChooser 但实际上还没有开始意图?
- node.js - 如何在 Angular 中为嵌套的 JSON 对象使用搜索过滤器?
- python - 熊猫按分钟比较时区感知日期时间字段
- c++ - DX11 中的 D3DXLoadSurfaceFromResourceW 和 D3DXLoadSurfaceFromFileW 等效项
- git - 我正在尝试将我的文件代码推送到 GitHub,但它不起作用
- image - 为什么图像分类竞赛是选择五个候选人的方式?不是4,不是3,尤其不是1?
- sql - 如何获得每年特定类别的计数?
- azure - Azure AAD App can access Admin App without granting permission using a token
- android - 无法解决方法 addAll() 和 Clear()
- typescript - 在 RxJS 中订阅子 Observable 的订阅