Вопрос

#!/usr/bin/env python
import os, sys, subprocess, time
while True:    
    print subprocess.call("xsel", shell=True);
    time.sleep(1);

Берет запись из буфера обмена и печатает ее каждые 1 секунду.

Результат:

copied0
entry0
from0
clipboard0

Я не знаю, почему он возвращает окончательный 0, но это, по-видимому, мешает мне использовать string strip (int не имеет strip), следовательно, 0 делает строку целым числом?

Как можно удалить final 0 из строки python в приведенном выше результате?

Я создаю скрипты для BASH, конвертируя их на python.

Это было полезно?

Решение

Как указал Марк, subprocess.call() делает не то, что вы хотите

Что-то вроде этого должно сработать

#!/usr/bin/env python
import os, sys, subprocess, time
while True:
    p=subprocess.Popen(["xsel"],stdout=subprocess.PIPE)
    print p.stdout.read()
    time.sleep(1)

Другие советы

Редактировать: subprocess.call возвращает не строку, а целое число - это 0 вы видите (после фактического вывода xsel).Используйте, вместо:

print subprocess.Popen('xsel', stdout=subprocess.PIPE).communicate()[0]

Мне кажется, что он запускает "xsel", который выводит свои результаты в стандартный вывод, а затем выводит код возврата (0) в стандартный вывод.Вы не получаете результаты клипа из python.

Вы, вероятно, хотите subprocess.popen и захватить стандартный вывод.

"copied0".rstrip("0") должно сработать

На самом деле, вам лучше поступить так, это не приведет к отображению кода возврата на экране

import os, sys, subprocess, time
while True:    
    _ = subprocess.call("dir", shell=True);
    time.sleep(1);

В 0 и новый перевод строки в каждой строке - это единственное, что печатается командой python print, где ноль - это код возврата оболочки из subprocess.call.Сама оболочка сначала выводит свои результаты в стандартный вывод, вот почему вы видите это слово.

Редактировать:Смотрите комментарии к посту Марка о прозрении.

Если ноль всегда находится в конце строки, и поэтому вы просто всегда хотите удалить последний символ, просто сделайте st=st[:-1].

Или, если вы не уверены, что в конце будет ноль, вы можете сделать if st[-1]==0: st=st[:-1].

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top