繁体   English   中英

从另一个脚本运行python脚本,同时从另一个脚本/脚本生成的json传递args?

[英]Running a python script from another script while passing args from another script/json generated by script?

因此,我有3个脚本,为简单起见,我们将其称为a.py,b.py和c.py

现在a.py创建了一个包含一些我想传递给b的数据的json,该数据将使用b来创建另一个包含其他相关数据子集的json,我想从c.py中执行此操作。 我怎样才能让b从a生成的json中读取,然后将b生成的json传递给c。 我考虑过像这样进口

import a
import b

id假定我将从b导入函数,但实际上我需要b内的所有函数,我只是从b导入所有函数并正常传递参数,还是会有其他方法来处理此问题? 要了解更多情况,

c.py将创建一个目录,来自b.py的json将存储在该目录中。我也需要在我的工作目录中使用init .py进行这些导入,它们都在同一目录中。

(从评论到问题)

考虑以下文件:

#-- b.py ----------------------------------------------------------------------------------
def main():
    name = input("Enter your name: ")         # Python 3, use raw_input for Python 2
    print("Your name is:", name)


#-- a.py ----------------------------------------------------------------------------------
import json

# Some method of generating a json
j = json.dumps({'name': 'Alice'})

并且您希望b.py的main函数使用a.py生成的json中的数据,而不是main提示用户的数据。

换句话说,在上面的示例中,您希望将程序打印出来Your name is: Alice而不会提示用户输入。

如果是这种情况,您可以将代码重构为如下所示:

#-- b.py ----------------------------------------------------------------------------------
def process(name):
    print("Your name is:", name)

def get_user_input():
    name = input("Enter your name: ")           # Python 3, use raw_input for Python 2
    process(name)                               # Prints: "Your name is: (whatever)"


#-- a.py ----------------------------------------------------------------------------------
import json
from b import process

# Some method of generating a json
j = json.dumps({'name': 'Alice'})

# (We created a json for no real reason, parse it back into a dict to access it)
d = json.loads(j)

# Call b.py's process function, and pass it the name in the json
process(d['name'])                              # Prints: "Your name is: Alice"

这里的“技巧”是将main功能执行的“工作”分为两个单独的功能。

  • 第一个函数( process )被命名并对其进行“处理”。 在该示例中,它所做的只是将其打印出来。
  • 第二个函数(在重构中名为get_user_input )获取用户的输入并将其传递给第一个函数。

完成此操作后,您可以跳过用户输入(因为不需要它,因此您想使用JSON数据),甚至可以从其他文件直接调用process

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM