Есть ли альтернативный способ закрыть дескриптор файла stdin (в настоящее время используется <& - with shell = True)? - PullRequest
0 голосов
/ 18 февраля 2019

Я хотел бы написать скрипт на python, который взаимодействует с dmenu.Мне удалось выяснить, что если я хочу, чтобы dmenu принимала только пользовательский ввод, я могу передать

dmenu <&-

, и он отобразит чистое приглашение ввода пользователя.Я знаю, что эквивалентный способ сделать это в Python с использованием подпроцесса -

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

Однако я не думаю, что это лучший способ, так как, если я использую приглашение, оно будет интерпретировать текст приглашения как bashсинтаксис (например, в "dmenu -p 'Project?'" он будет интерпретировать '?').

Есть ли способ использовать подпроцесс. Открыть, чтобы добиться того же?Я перепробовал кучу разных вещей, таких как

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

Является ли использование shell = True единственным способом добиться этого?

1 Ответ

0 голосов
/ 18 февраля 2019

Все, что вам нужно сделать, это не вводить данные в dmenu, поэтому:

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