【发布时间】:2019-07-20 16:02:12
【问题描述】:
我正在尝试使用 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”的解决方案有什么区别,但这不会导致问题,而上述程序会。
【问题讨论】:
-
你能更详细地描述你的用例吗?为什么要从 python 运行程序然后使用终端?也许我们可以利用这些信息找到更好的解决方案
-
feh 是一个图形查看器。我的程序将在最后一次操作时打开一张图片。我不想在图片打开的整个过程中将自己锁在控制台之外。注意python主程序已经关闭,但是打开feh的子进程还在运行。无论是立即关闭图形还是继续工作,我都必须使用 $ stty sane 清理我的控制台。不是我每次运行这个程序时都想做的事情
标签: linux python-3.x subprocess i3