在脚本中停止命令行命令

时间:2016-06-10 23:01:13

标签: python linux python-3.x ubuntu

我正在编写一个脚本,我希望能够运行命令行命令,可能使用os.system(“stuff”)。但是,如果我的命令不能自行结束呢?就像,通常在我的终端我必须ctl + C结束它。有没有办法可以运行它,停止它并获取输出?

我确信必须有,但我不知道,我不确定我是否知道找到它的正确术语(我所有的Python都是通过实验自学的)

谢谢!

2 个答案:

答案 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()

here's a reference for more info