我正在尝试使用 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”的解决方案是什么,但这不会导致问题,而上述程序会。