subprocess.Popen ломает терминал при выходе - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь использовать python для открытия программы.Моя цель - сделать терминал доступным для меня после того, как python запустит подпроцесс.

import subprocess
subprocess.run(['feh', 'foo.png']) # locks program until I close the image = no go
subprocess.Popen('feh', 'foo.png']) # works but breaks new line in terminal

В терминале мне нужно запустить

$ stty sane

, чтобы исправить, но я не вижу, чтоЯ печатаю ...

Я пытался добавить это в конец моей программы:

import atexit
def fixTerm():
    subprocess.run(['stty', 'sane'])
atexit.register(fixTerm)

, но без радости.программа по-прежнему ломает терминал при выходе (или изменяет, если я использую .run ()

Я столкнулся с этой проблемой на нескольких платформах Linux, в настоящее время пытаюсь согнуть и использовать Arch Linux и i3

прочеепытается без радости:

subprocess.Popen(['feh', 'foo.png'], shell=True)
subprocess.Popen(['feh', 'foo.png'], shell=False)
subprocess.Popen(['feh', 'foo.png'],
    stdout=subprocess.PIPE, universal_newlines=True)

Не уверен, что попробовать дальше. Любая помощь очень ценится.

Вот вся программа, которая ломает терминал.

#! /usr/bin/python
import matplotlib.pyplot as plt
import numpy as np
import subprocess

x = np.linspace(0, 2, 100)
plt.plot(x, x**2, label='quadratic')

plt.savefig('foo.png', bbox_inches='tight')
p = subprocess.Popen(['feh', 'foo.png'])

Я не уверен, в чем различие между этим и тем, каково решение "А. Алберштейна", но это не вызывает проблемы, и вышеупомянутая программа делает.

1 Ответ

0 голосов
/ 05 марта 2019

Работает у меня просто отлично, нет выхода feh.Что вы подразумеваете под "ломает новую строку"?

~ 
➔ python -c "import subprocess; subprocess.Popen(['feh', '42.png'])"

~ 
➔ echo "feh is open"
feh is open

~ 
➔ echo "I closed it"
I closed it

~ 
➔ 
...