如何导入python脚本并将参数传递给主函数
我有两个python脚本。主脚本调用generate.py,它有一个从argsparse获取3个参数的主函数。我要做的是,将generate.py导入main.py。从generate.py调用main函数,但将三个参数传递给它,以便它可以使用这些参数执行main函数 这三个参数是路径、文件和数据 Path只是数据的文件路径 文件本质上是通过目录中的文件进行循环的for循环 数据是包含json文件的文件夹 到目前为止,我的main.py脚本如下所示:如何导入python脚本并将参数传递给主函数,python,python-2.7,arguments,parameter-passing,args,Python,Python 2.7,Arguments,Parameter Passing,Args,我有两个python脚本。主脚本调用generate.py,它有一个从argsparse获取3个参数的主函数。我要做的是,将generate.py导入main.py。从generate.py调用main函数,但将三个参数传递给它,以便它可以使用这些参数执行main函数 这三个参数是路径、文件和数据 Path只是数据的文件路径 文件本质上是通过目录中的文件进行循环的for循环 数据是包含json文件的文件夹 到目前为止,我的main.py脚本如下所示: def get_json_location(
def get_json_location(username=os.getlogin()):
first = "/Users/"
last = "/Desktop/data-code/Testdata"
result = first + username + last
return result
def get_config():
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--parameter-file", action="store", required=False)
parser.add_argument("-e", "--export-data-file", action="store", required=False)
parser.add_argument("-d", "--export-date", action="store", required=False)
args = parser.parse_args()
return [args.parameter_file, args.export_data_file, args.export_date]
path, files, data = get_config()
date = get_config()[2]
yml_directory = os.listdir('yaml')
yml_directory.remove('export_config.yaml')
def generate_json():
with open('dates/' + date + '.json', 'w') as start:
start.close()
for yml in yml_directory :
print("Running export for " + yml)
# Here is the script that i am calling but i want to pass the parameters path , file and data_folder
gen_json.main(path,files,data)
if __name__ == '__main__':
generate_json()
generate.py如下所示:
def main(get_config):
cfg = get_config()[0] # json location
data = get_config()[1] # export_agent_core_agent.yaml
date = get_config()[2] # synthetic data folder - YYYY-MM-DD
json_location = cfg
json_database = data["config"]["database"]
json_collection = data["config"]["collection"]
json_path = "{0}/{1}{2}/{3}/{3}.json".format(json_location, date, json_database, json_collection)
def get_config():
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--parameter-file", action="store", required=True)
parser.add_argument("-e", "--export-data-file", action="store", required=True)
parser.add_argument("-d", "--export-date", action="store", required=True)
args = parser.parse_args()
return [args.parameter_file, funcs.read_config(args.export_data_file), args.export_date]
if __name__ == "__main__":
logging.getLogger().setLevel(logging.INFO)
main(get_config)
想想重构你的代码吧 要回答您的问题,您可以将字符串从
main.py
传递到gen_json.main(“…”)
,再传递到gen_json.get_config(“…”)
。Argparse将计算需要拆分为列表的字符串。您仍然可以使用命令行参数调用generate.py 请注意,我删除了不必要的/不正确的代码/标识,以说明这在原则上是如何工作的 generate.py:
import argparse
import sys
def main(cliParams=None):
cfg, data, date = get_config(cliParams)
print (cfg, data, date)
#json_location = cfg
#json_database = data["config"]["database"]
#json_collection = data["config"]["collection"]
#json_path = "{0}/{1}{2}/{3}/{3}.json".format(json_location, date, json_database, json_collection)
#print json_path
def get_config(cliParams=None):
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--parameter-file", action="store", required=True)
parser.add_argument("-e", "--export-data-file", action="store", required=True)
parser.add_argument("-d", "--export-date", action="store", required=True)
if not cliParams:
args = parser.parse_args()
else:
args = parser.parse_args(cliParams.split())
#return [args.parameter_file, funcs.read_config(args.export_data_file), args.export_date]
return [args.parameter_file, args.export_data_file, args.export_date]
if __name__ == "__main__":
logging.getLogger().setLevel(logging.INFO)
main()
main.py:
import os
import generate as gen_json
def generate_json():
path = '/tmp/foo.yml'
data = 'export_agent_core_agent.yaml'
date = '2019-01-15'
argParseString = '-p %s -e %s -d %s' % (path, data, date)
gen_json.main(argParseString)
if __name__ == '__main__':
generate_json()
打印到标准输出:
>>> /tmp/foo.yml export_agent_core_agent.yaml 2019-01-15
请更正缩进-这不是有效的python代码请正确缩进您的代码(不可能像现在这样遵循它)。此外,请删除与此问题无关的任何代码。@Bjorn代码已缩进,并删除了与此问题无关的代码question@JörgBeyer代码已缩进您确定这是真实代码吗?例如,“get_config”函数中的“path,files,data=get_config()”不可访问。您在上面的行中无条件地“返回”。另外,请看一下“get_json_location”中的“return”