Я добавляю дополнительный ответ, основываясь на том факте, что os.popen
теперь считается устаревшим. Следующий код взят из исходного ответа (кроме имен переменных, измененных для удобства):
out = os.popen("xsel").read()
Теперь мы переписываем его, используя subprocess.Popen
вместо os.popen
:
process = subprocess.Popen("xsel", stdout=subprocess.PIPE, universal_newlines=True)
out = process.stdout.read()
Это можно упростить следующим образом:
process = subprocess.Popen("xsel", stdout=subprocess.PIPE, universal_newlines=True)
out, err = process.communicate()
И лучшее в конце:
out = subprocess.check_output("xsel", universal_newlines=True)
Опция universal_newlines
, хотя название этого не предполагает, превращает ввод и вывод в текстовые строки вместо строк байтов, которые используются по умолчанию для subprocess.Popen
.