What happens when you apply subprocess.run on a Linux command that starts a process that requires user input to terminate?
A simple example of such a program is xclock. It opens a new window displaying a clock until the window is closed by the user.
As the command subprocess.run creates a CompletedProcess object, the following Python script:
import subprocess as sp
res=sp.run(['xclock'])
starts a process and waits until it ends, that is, until somebody closes the window with the clock; see Figure 17.9:
This makes a difference to subprocess.Popen. It creates a _Popen object. The process itself becomes a Python object. It need not be completed to become an accessible Python object:
import subprocess as sp
p=sp.Popen(['xclock'])
The process is completed by either a user action on the clock window or by explicitly terminating the process with:
p.terminate()
With Popen, we can construct Linux pipes in Python...