Home Backend Development Python Tutorial Detailed introduction to the subprocess package of the Python standard library

Detailed introduction to the subprocess package of the Python standard library

Mar 23, 2017 pm 04:51 PM

The content here is based on Linux process foundation and Linux text stream. The main function of the subprocess package is to execute external commands and programs. For example, I need to use wget to download a file. I'm calling the wget program in Python. In this sense, subprocess functions similarly to the shell.

subprocess and commonly used encapsulation functions

When we run python, we are creating and running a process. As we introduced in Linux Process Basics, a process can fork a child process and let the child process exec another program. In Python, we use the subprocess package in the standard library to fork a subprocess and run an external program (fork, exec, see Linux Process Basics).

The subprocess package defines several functions for creating subprocesses. These functions create subprocesses in different ways, so we can choose one of them to use according to our needs. In addition, subprocess also provides some tools for managing standard streams and pipes to use text communication between processes.

When using the functions in the subprocess package to create a child process, please note:

1) After creating the child process, whether the parent process is paused and waits for the child process to run.

2) What does the function return?

3) When the returncode is not 0, how does the parent process handle it.

subprocess.call()
Copy after login



The parent process waits for the child process to complete

Return exit information (returncode, equivalent to exit code, see Linux process basics)

subprocess.check_call()
Copy after login


The parent process waits for the child process to complete

Return 0

Check the exit information. If the returncode is not 0, raise the error subprocess.CalledProcessError. This object contains the returncode Attributes can be checked with try...except... (see Python error handling).

subprocess.check_output()
Copy after login



The parent process waits for the child process to complete

Return the output results of the child process to standard output

Check the exit information, if the returncode does not If it is 0, the error subprocess.CalledProcessError is raised. This object contains the returncode attribute and the output attribute. The output attribute is the output result of the standard output and can be checked by try...except....

The usage of these three functions is similar. We use subprocess.call() to illustrate:

import subprocess
rc = subprocess.call(["ls","-l"])
Copy after login



We will combine the program name (ls) and The parameters (-l) are put together in a table and passed to subprocess.call()

An entire string can be interpreted through a shell:

import subprocess
out = subprocess.call("ls -l", shell=True)
out = subprocess.call("cd ..", shell=True)
Copy after login



We used the shell=True parameter. This time, we use an entire string instead of a table to run the child process. Python will first run a shell and then use this shell to interpret the entire string.

Some of the shell commands are built-in commands of the shell. These commands must be run through the shell, $cd. shell=True allows us to run such commands.

Popen()

In fact, our three functions above are all wrappers based on Popen(). The purpose of these encapsulation is to make it easier for us to use subprocesses. When we want to be more customized to our needs, we turn to the Popen class, which generates objects that represent child processes.

Different from the above encapsulation, after the Popen object is created, the main program will not automatically wait for the sub-process to complete. We must call the wait() method of the object before the parent process will wait (that is, block the block):

import subprocess
child = subprocess.Popen(["ping","-c","5","www.google.com"])
print("parent process")
Copy after login



We can see from the running results that the parent process is opening the child The process does not wait for the child to complete, but directly runs print.

Compare the waiting situation:

import subprocess
child = subprocess.Popen(["ping","-c","5","www.google.com"])
child.wait()
print("parent process")
Copy after login



In addition, you can also perform other operations on the child process in the parent process, such as the child in our example above Object:

child.poll()      # 检查子进程状态

child.kill()      # 终止子进程

child.send_signal()  # 向子进程发送信号

child.terminate()   # 终止子进程
Copy after login


The PID of the child process is stored in child.pid

The text flow control of the child process

(Inherited child child process) The standard input, standard output and standard error of the child process can also be represented by the following attributes:

child.stdin

child.stdout

child.stderr

We can change the standard input, standard output and standard error when Popen() creates a subprocess, and can use subprocess.PIPE to connect the input and output of multiple subprocesses together to form a pipe:

import subprocess
child1 = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE)
child2 = subprocess.Popen(["wc"], stdin=child1.stdout,stdout=subprocess.PIPE)
out = child2.communicate()
print(out)
Copy after login


subprocess.PIPE actually provides a buffer area for the text stream. child1's stdout outputs the text to the buffer area, and then child2's stdin reads the text from the PIPE. The output text of child2 is also stored in PIPE until the communicate() method reads the text in PIPE from PIPE.

It should be noted that communicate() is a method of the Popen object, which blocks the parent process until the child process is completed.

We can also use the communicate() method to use PIPE to input input to the child process:

import subprocess
child = subprocess.Popen(["cat"], stdin=subprocess.PIPE)
child.communicate("vamei")
Copy after login


我们启动子进程之后,cat会等待输入,直到我们用communicate()输入"vamei"。

通过使用subprocess包,我们可以运行外部程序。这极大的拓展了Python的功能。如果你已经了解了操作系统的某些应用,你可以从Python中直接调用该应用(而不是完全依赖Python),并将应用的结果输出给Python,并让Python继续处理。shell的功能(比如利用文本流连接各个应用),就可以在Python中实现。

总结

subprocess.call, subprocess.check_call(), subprocess.check_output()

subprocess.Popen(), subprocess.PIPE

Popen.wait(), Popen.communicate()


The above is the detailed content of Detailed introduction to the subprocess package of the Python standard library. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1658
14
PHP Tutorial
1257
29
C# Tutorial
1231
24
Python vs. C  : Applications and Use Cases Compared Python vs. C : Applications and Use Cases Compared Apr 12, 2025 am 12:01 AM

Python is suitable for data science, web development and automation tasks, while C is suitable for system programming, game development and embedded systems. Python is known for its simplicity and powerful ecosystem, while C is known for its high performance and underlying control capabilities.

Python: Games, GUIs, and More Python: Games, GUIs, and More Apr 13, 2025 am 12:14 AM

Python excels in gaming and GUI development. 1) Game development uses Pygame, providing drawing, audio and other functions, which are suitable for creating 2D games. 2) GUI development can choose Tkinter or PyQt. Tkinter is simple and easy to use, PyQt has rich functions and is suitable for professional development.

How Much Python Can You Learn in 2 Hours? How Much Python Can You Learn in 2 Hours? Apr 09, 2025 pm 04:33 PM

You can learn the basics of Python within two hours. 1. Learn variables and data types, 2. Master control structures such as if statements and loops, 3. Understand the definition and use of functions. These will help you start writing simple Python programs.

The 2-Hour Python Plan: A Realistic Approach The 2-Hour Python Plan: A Realistic Approach Apr 11, 2025 am 12:04 AM

You can learn basic programming concepts and skills of Python within 2 hours. 1. Learn variables and data types, 2. Master control flow (conditional statements and loops), 3. Understand the definition and use of functions, 4. Quickly get started with Python programming through simple examples and code snippets.

Python vs. C  : Learning Curves and Ease of Use Python vs. C : Learning Curves and Ease of Use Apr 19, 2025 am 12:20 AM

Python is easier to learn and use, while C is more powerful but complex. 1. Python syntax is concise and suitable for beginners. Dynamic typing and automatic memory management make it easy to use, but may cause runtime errors. 2.C provides low-level control and advanced features, suitable for high-performance applications, but has a high learning threshold and requires manual memory and type safety management.

Python and Time: Making the Most of Your Study Time Python and Time: Making the Most of Your Study Time Apr 14, 2025 am 12:02 AM

To maximize the efficiency of learning Python in a limited time, you can use Python's datetime, time, and schedule modules. 1. The datetime module is used to record and plan learning time. 2. The time module helps to set study and rest time. 3. The schedule module automatically arranges weekly learning tasks.

Python: Exploring Its Primary Applications Python: Exploring Its Primary Applications Apr 10, 2025 am 09:41 AM

Python is widely used in the fields of web development, data science, machine learning, automation and scripting. 1) In web development, Django and Flask frameworks simplify the development process. 2) In the fields of data science and machine learning, NumPy, Pandas, Scikit-learn and TensorFlow libraries provide strong support. 3) In terms of automation and scripting, Python is suitable for tasks such as automated testing and system management.

Python: Automation, Scripting, and Task Management Python: Automation, Scripting, and Task Management Apr 16, 2025 am 12:14 AM

Python excels in automation, scripting, and task management. 1) Automation: File backup is realized through standard libraries such as os and shutil. 2) Script writing: Use the psutil library to monitor system resources. 3) Task management: Use the schedule library to schedule tasks. Python's ease of use and rich library support makes it the preferred tool in these areas.

See all articles