将python中的SIGINT发送到os.system

时间:2014-12-08 11:19:45

标签: python linux os.system

我正在尝试使用strace -c ./client在python中运行Linux命令os.system()。当我按下ctrl+c时,我会在终端上获得一些输出。我必须在一分钟后以编程方式发送ctrl+c信号,并希望在文件中按ctrl+c后生成的终端输出。 伪脚本将非常有用。如果我使用subprocess.Popen然后从键盘发送ctrl+c信号我没有在终端上输出,那么必须使用os.system

2 个答案:

答案 0 :(得分:5)

在Python中,您可以使用os.kill以编程方式发送Ctrl+C信号。问题是,您需要获得信号的过程的pidos.system不会告诉您任何相关信息。您应该使用subprocess。我不太了解你没有得到终端输出的内容。

无论如何,这是你如何做到的:

import subprocess
import signal
import os

devnull = open('/dev/null', 'w')
p = subprocess.Popen(["./main"], stdout=devnull, shell=False)

# Get the process id
pid = p.pid
os.kill(pid, signal.SIGINT)

if not p.poll():
    print "Process correctly halted"

答案 1 :(得分:0)

我建议使用subprocess python模块来运行linux命令。其中,SIGINT信号(相当于Ctrl-C键盘中断)可以使用Popen.send_signal(signal.SIGINT)函数以编程方式发送到命令。 Popen.communicate()函数会给你输出。例如

import subprocess
import signal

..
process = subprocess.Popen(..)   # pass cmd and args to the function
..
process.send_signal(signal.SIGINT)   # send Ctrl-C signal
..
stdout, stderr = process.communicate()   # get command output and error
..