简体   繁体   中英

Stopping bash running in a python script

I am writing a python script that calls a bash script.

from subprocess import call
rc = call("./try_me.sh")

How can I exit the running bash file without exiting the running python script? I need something like Ctrl + C.

There's different ways to approach this problem.

It appears that you're writing some sort of CLI tool since you referenced Ctrl+C. If that's the case you can use & and send a SIGINT signal to stop it when you need.

import os
os.system('nohup ./try_me.sh &')

If you want stricter control try using async subprocess management:

https://docs.python.org/3/library/asyncio-subprocess.html

After Some research, I found I should have used Popen to run the bash file as @AKX suggested.

from subprocess import Popen
r1 = Popen('printf "*Systempassword* \n" |sudo -S  ./try_me.sh &', shell=True, preexec_fn=os.setsid))

when you need to stop running the bash file

import os
os.killpg(os.getpgid(r1.pid), signal.SIGTERM) # Send the signal to all the process groups

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM