subprocess.Popen在退出时中断终端

问题描述 投票:1回答:1

我尝试使用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'])

我不确定这与“A. Albershteyn”的解决方案之间存在什么差异,但这不会导致问题,而上述程序也是如此。

linux python-3.x subprocess i3
1个回答
0
投票

对我来说很好,没有feh的输出。你是什​​么意思“打破新线”?

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

~ 
➔ echo "feh is open"
feh is open

~ 
➔ echo "I closed it"
I closed it

~ 
➔ 
© www.soinside.com 2019 - 2024. All rights reserved.