2012-07-19 86 views
2

我有一個python腳本,需要發送控制C到mac終端。我試過發送純文本「^ C」,但我回頭說終端不能識別命令。 (終端意思是python創建的僞終端)如何使用python將控制C發送到Mac終端?

基本上,我使用終端來運行一箇舊的Unix可執行文件,我能想到的唯一方法是正常終止這個事情,就是發送中斷信號。有什麼辦法可以欺騙終端,認爲我按控制C?

在此先感謝!

回答

3

如果您可以使用os.kill獲得其PID,則可以將SIGINT信號明確發送給進程。

os.kill(pid, signal.SIGINT) 

這需要你來測試您的腳本搶進程PID,但它是效仿「CTRL-C」行爲的最好辦法。

+0

如果這個工具不是交互式的,那麼'SIGTERM'會不會是/更合適的?我一直認爲它是解釋'SIGINT'的shell,如果它沒有被基礎命令捕獲並且終止了你的命令。 – millimoose 2012-07-19 22:54:41

+1

...對於那些不熟悉信號的人,當你在終端輸入control-c時,它通常會發送一個信號,而不是發送一個文字控制-c給應用程序。應用程序從不會看到control-c字符,這就是爲什麼只是將control-c打印或管道傳輸到應用程序從不起作用的原因。 – 2012-07-19 22:56:57

+0

啊...這就是爲什麼......現在更有意義。 – Mizmor 2012-07-20 15:02:02

0

如果您打開使用subprocessPopen的過程中,你應該能夠發送控制信號是這樣的:

proc.send_signal(signal.SIGINT) 

你需要import signal得到SIGINT

相關問題