有没有其他方法可以关闭stdin文件描述符(当前使用<&-和shell = True)?

时间:2019-02-18 19:57:46

标签: python linux subprocess

我想编写一个与dmenu交互的python脚本。我能够弄清楚,如果我只希望dmenu仅接受用户输入,则可以通过

dmenu <&-

,它将显示干净的用户输入提示。我知道在python中使用子进程的等效方法是

subprocess.check_output("dmenu <&-", shell=True)

但是我认为这不是最好的方法,因为如果使用提示,它将提示文本解释为bash语法(例如,在“ dmenu -p'Project?'”中,它将解释为“吗?”。

是否可以使用subprocess.Popen来实现相同的目的?我尝试了很多不同的东西,例如

subprocess.Popen("dmenu", stdin=None)
import sys
sys.stdin.close()
subprocess.Popen("dmenu", stdin=sys.stdin)

使用shell = True是实现此目标的唯一方法吗?

1 个答案:

答案 0 :(得分:2)

您需要做的就是不向dmenu提供任何输入,因此:

subprocess.check_output("dmenu", input=b"")