使用子流程在python脚本中输入内容来调用python脚本

发布于 2021-02-02 23:15:21

我有一个脚本a.py,执行时会向用户询问某些查询,并以json格式构建输出框架。使用python子进程,我可以从另一个名为的脚本中调用此脚本b.py。一切都按预期工作,除了我无法在变量中获取输出?我正在Python 3中执行此操作。

关注者
0
被浏览
93
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    要使用subprocess模块从另一个脚本中调用Python脚本并传递一些输入并获取其输出,请执行以下操作:

    #!/usr/bin/env python3
    import os
    import sys
    from subprocess import check_output
    
    script_path = os.path.join(get_script_dir(), 'a.py')
    output = check_output([sys.executable, script_path],
                          input='\n'.join(['query 1', 'query 2']),
                          universal_newlines=True)
    

    这里get_script_dir()定义了功能。

    更为灵活的替代方法是导入模块a并调用函数以获取结果(确保a.py使用if name==”main“防护,以避免在导入时运行不良代码):

    #!/usr/bin/env python
    import a # the dir with a.py should be in sys.path
    
    result = [a.search(query) for query in ['query 1', 'query 2']]
    

    你可以用来mutliprocessing在单独的进程中运行每个查询(如果执行查询占用大量CPU,则可能会提高时间性能):

    #!/usr/bin/env python
    from multiprocessing import freeze_support, Pool
    import a
    
    if __name__ == "__main__":
       freeze_support()
       pool = Pool() # use all available CPUs
       result = pool.map(a.search, ['query 1', 'query 2'])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看