使用子进程在 python 脚本中调用带有输入的 python 脚本

Calling a python script with input within a python script using subprocess(使用子进程在 python 脚本中调用带有输入的 python 脚本)
本文介绍了使用子进程在 python 脚本中调用带有输入的 python 脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a script a.py and while executing it will ask certain queries to user and frame the output in json format. Using python subprocess, I am able to call this script from another script named b.py. Everything is working as expected except that I am not able to get the output in a variable? I am doing this in Python 3.

推荐答案

使用 subprocess 模块从另一个脚本调用 Python 脚本并传递一些输入并获取其输出:

To call a Python script from another one using subprocess module and to pass it some input and to get its output:

#!/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='
'.join(['query 1', 'query 2']),
                      universal_newlines=True)

这里定义了get_script_dir()函数.

where get_script_dir() function is defined here.

更灵活的替代方法是导入模块 a 并调用函数以获取结果(确保 a.py 使用 if __name__=="__main__" 守卫,避免在导入时运行不需要的代码):

A more flexible alternative is to import module a and to call a function, to get the result (make sure a.py uses if __name__=="__main__" guard, to avoid running undesirable code on import):

#!/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 密集型的,那么它可能会提高时间性能):

You could use mutliprocessing to run each query in a separate process (if performing a query is CPU-intensive then it might improve time performance):

#!/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'])

这篇关于使用子进程在 python 脚本中调用带有输入的 python 脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)