Ответ 1
Чтобы вызвать Python script из другого с помощью модуля subprocess
и передать ему некоторый ввод и получить его вывод:
#!/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__"
guard, чтобы избежать запуска нежелательного кода при импорте):
#!/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
для запуска каждого запроса в отдельном процессе (если выполнение запроса имеет интенсивность процессора, тогда это может улучшить производительность):
#!/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'])