簡體   English   中英

將python中的SIGINT發送到os.system

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM