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

标签 python python-3.x subprocess

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

最佳答案

使用 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() function is defined here .

一个更灵活的替代方案是导入模块 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'])

关于python - 使用子进程在 python 脚本中调用带有输入的 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30076185/

相关文章:

python - Python 支持哪些拼写错误/拼写错误?

python - Python中使用tempfile和subprocess将mysql转入mongodb

python - 在python中通过命令杀死进程

python -/bin/sh : 1: Syntax error: word unexpected - Using os. system() 来自 Python

python - 显示价格

python - 删除 PIP 中所有已失效依赖者的包

python - 非本地与静态相同吗?

Python winreg - 如何将换行写入 REG_SZ 值

python - DLL 加载失败 : in installing opencv2?

python-3.x - 在Python3中从循环内部重置for循环的参数