2012-07-19 53 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