python - 是否有另一种方法来关闭标准输入文件描述符(当前使用 <&- with shell=True)?

标签 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 是实现此目的的唯一方法吗?

最佳答案

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

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

关于python - 是否有另一种方法来关闭标准输入文件描述符(当前使用 <&- with shell=True)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54754487/

相关文章:

linux - 如何将存档的所有对象包含在共享对象中?

python - grep 与 python 子进程替换

java - 从 Java 调用 WMIC.EXE(挂起)

python - 无法准确抓取google新闻

python - 使用 BeautifulSoup 从网页中提取某些内容时遇到问题

mysql - 使用 sudo 命令时出错

linux - 将搁置的更改列表合并到分支中

python - 在序列化器中从一对一关系模型添加额外字段

python - 函数名作为另一个函数的输入?

python - python进程的远程 Controller