[英]Send SIGINT in python to os.system
我正在嘗試使用os.system()
在python中運行Linux命令strace -c ./client
。 當我按下ctrl+c
我會在終端上獲得一些輸出。我必須在一分鍾后以編程方式發送ctrl+c
信號,並希望在文件中按下ctrl+c
之后產生終端輸出。 偽腳本將非常有用。如果我使用subprocess.Popen
,然后從鍵盤發送ctrl+c
信號,但終端上沒有輸出,則必須使用os.system
在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"
我建議使用子進程python模塊來運行linux命令。 這樣,就可以使用Popen.send_signal(signal.SIGINT)函數以編程方式將SIGINT信號(等效於Ctrl-C鍵盤中斷)發送到命令。 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
..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.