我正在尝试使用strace -c ./client
在python中运行Linux命令os.system()
。当我按下ctrl+c
时,我会在终端上获得一些输出。我必须在一分钟后以编程方式发送ctrl+c
信号,并希望在文件中按ctrl+c
后生成的终端输出。
伪脚本将非常有用。如果我使用subprocess.Popen
然后从键盘发送ctrl+c
信号我没有在终端上输出,那么必须使用os.system
答案 0 :(得分:5)
在Python中,您可以使用os.kill以编程方式发送Ctrl+C
信号。问题是,您需要获得信号的过程的pid
,os.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
..