os.system выводит слишком много? - PullRequest
0 голосов
/ 16 мая 2011

Я пытаюсь сделать это, чтобы получить содержимое буфера обмена

clipboard_data = os.system("pbpaste")

Но это не работает!Он не только не сохраняет то, что было в буфере обмена (некоторый текст) в переменной var (возвращает 0), но и выводит результат команды на экран.

Как я могу заставить его работать так, как я хочу?

Ответы [ 3 ]

4 голосов
/ 16 мая 2011

Вы должны посмотреть, что предлагается в subprocess модуле для Python. В версии 2.7 и выше вы можете достичь желаемого с помощью следующего, например:

from subprocess import check_output
clipboard_data = check_output(["pbpaste"])

... или в более ранних версиях:

from subprocess import Popen, PIPE
clipboard_data = Popen(["pbpaste"], stdout=PIPE).communicate()[0]

Не хватает проверки ошибок, но вы поняли ...

1 голос
/ 16 мая 2011

Независимо от того, чего вы пытаетесь достичь (я не знаком с pbpaste и ИМХО есть более совершенные способы доступа к буферу обмена ), os.system возвращает состояние завершения процесса это вызывает, а не его стандартный вывод.

Вы должны использовать subprocess.Popen (с его communicate методом), чтобы получить стандартный вывод.

0 голосов
/ 21 мая 2013

Простой метод - использовать метод

f = os.popen(command)

, он возвращает файл, подобный объекту, а затем вы можете использовать метод f.readline () для возврата строки.Однако этот метод довольно прост и не должен использоваться для обработки больших объемов данных, поскольку он использует много ресурсов процессора компьютера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...