В вашем коде нет ничего плохого, проблема в том, что команда, которую вы запускаете, пытается что-то сделать с текущим терминалом и неправильно восстанавливает настройки, при которых происходит отключение. Замена вашей команды на «сон», как показано ниже, будет работать нормально и без проблем остановится на Ctrl + C:
import subprocess
command = ['/bin/bash']
command.extend(['-c', 'sleep 600'])
p = subprocess.Popen(command)
try:
p.communicate()
except KeyboardInterrupt:
p.terminate()
Я не знаю, что вы пытаетесь сделать с помощью spark-shell, но если вам не нужен его вывод, вы можете попробовать перенаправить его в / dev / null, чтобы он не испортил дисплей терминала:
p = subprocess.Popen(command, stdout=subprocess.DEVNULL)
Grant Skinner записал превосходный ряд статей об управлении ресурсами в ActionScript 3, и в третьей части того ряда он представляет WeakReference и классы помощника WeakProxyReference, которые могут использоваться для этого.
Прямо сейчас я сделал простой класс для использования в своих интересах Словаря weakKeys параметр:
public class WeakReference
{
private var dic
public function WeakReference(object)
{
this.dic = new Dictionary(true)
this.dic[object] = true
}
public function get Value()
{
for (var object in this.dic)
{
return object
}
return null
}
}