我正在编写一个脚本,我希望能够运行命令行命令,可能使用os.system(“stuff”)。但是,如果我的命令不能自行结束呢?就像,通常在我的终端我必须ctl + C结束它。有没有办法可以运行它,停止它并获取输出?
我确信必须有,但我不知道,我不确定我是否知道找到它的正确术语(我所有的Python都是通过实验自学的)
谢谢!
答案 0 :(得分:3)
os.system()不返回由它生成的子shell的控件,而是在子shell执行命令时仅返回退出代码。这可以通过以下方式验证:
x = os.system("echo 'shankar'")
print(x)
您需要的是subprocess
库。
您可以使用subprocess.Popen()
函数启动子进程。此函数将子进程的控制作为一个对象返回,可以对其进行操作以控制子进程。
子流程模块提供了更强大的工具来生成新流程并检索其结果。
运行它:
import subprocess
proc = subprocess.Popen(['foo', 'bar', 'bar'], stdout=subprocess.PIPE, shell=True)
此处proc
是返回的对象,它提供对生成的子进程的控制。您可以检索有关该过程的信息或使用此对象对其进行操作。
proc.pid # returns the id of process
停止:
proc.terminate() # terminate the process.
Popen.terminate()
相当于将ctrl+c
(SIGTERM)发送到子流程。
您可以使用Popen.communicate()
函数获取输出。
获取输出
out, err = proc.communicate()
注意:Popen.communicate()
仅在子流程成功退出或已终止或终止时才返回输出。
答案 1 :(得分:0)
您可以设置一段时间或循环以及条件,以便使用以下命令终止进程: os.kill(),获取进程pid使用os.getpid()