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

Принимает запись из буфера обмена и печатает ее каждые 1 секунду.Strip final 0 с строки python

Результат:

copied0 
entry0 
from0 
clipboard0 

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

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

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

ответ

4

Как Марк отметил, 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) 
+0

Спасибо XD - поэтому мне нужно использовать другой подпроцесс. – torger

+0

И у нас есть успех: print subprocess.Popen (["xsel"], stdout = subprocess.PIPE) .stdout.read() – torger

+0

Я предполагаю, что вам нужно было уловить вывод xsel, а не только распечатать его до терминала –

2

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

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

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

Мне нужно, чтобы лишить его итеративно, как указано выше. Я создал это из вашего сообщения: entry = subprocess.call («xsel», shell = True); \t print "entry" .rstrip ("0entry") - кажется, работает, но не настолько элегантно. – torger

+0

Пробовал это - AttributeError: объект 'int' не имеет атрибута 'rstrip' - причина вопроса. – torger

+0

Получите ту же ошибку, поэтому я сделал то, что сделал выше. – torger

2

Он смотрит на меня, как это работает «xsel», которая печать своих результатов на stdout, затем распечатайте код возврата (0) на stdout. Вы не получаете результаты клипа из python.

Возможно, вы хотите получить subprocess.popen и захватить stdout.

1

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

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

4

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

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

Потерял полу, двоеточие. – torger

+0

TypeError: объект 'int' не подлежит подписке - я не знаю, что я делаю неправильно - возможно, так, как вызов выдает свои данные. – torger

2

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

Редактировать: См. Комментарии в сообщении S Mark для прозрения.

Смежные вопросы