Home > Article > Backend Development > Here are a few question-style titles that fit the content of your article: * How to Capture Output from a Subprocess with User Input in Python? * Getting Output from Subprocesses That Require User I
Accessing Output of a Subprocess with User Input in Python
In Python, you can utilize the subprocess module to execute external scripts. However, when calling a script that prompts for user input, obtaining its output within the calling script can be challenging. This article explores solutions to this problem.
Solution 1: Using check_output() with Input
The subprocess.check_output() function allows you to run a script and capture its output. To pass input to the script, use the input parameter:
<code class="python">import os import subprocess # Get script directory script_path = os.path.join(os.getcwd(), 'a.py') # Execute the script and capture output output = subprocess.check_output([sys.executable, script_path], input='\n'.join(['query 1', 'query 2']), universal_newlines=True)</code>
Solution 2: Module Import and Function Call
An alternative approach is to import the script module and call a specific function:
<code class="python">import a results = [a.search(query) for query in ['query 1', 'query 2']]</code>
Ensure that the imported script uses the if __name__ == "__main__": guard to prevent its code from executing on import.
Solution 3: Multiprocessing
If query processing is CPU-intensive, you can improve performance by parallelizing the execution using multiprocessing:
<code class="python">from multiprocessing import freeze_support, Pool import a freeze_support() pool = Pool() # Use all available CPUs results = pool.map(a.search, ['query 1', 'query 2'])</code>
The above is the detailed content of Here are a few question-style titles that fit the content of your article: * How to Capture Output from a Subprocess with User Input in Python? * Getting Output from Subprocesses That Require User I. For more information, please follow other related articles on the PHP Chinese website!