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

從剪貼板中輸入並每隔1秒打印一次。剝離python字符串的最終0 0

結果:

copied0 
entry0 
from0 
clipboard0 

我不知道爲什麼它返回最終0,但它顯然是阻止我使用字符串條(INT還沒有剝離),因此0使得字符串的整數?

如何在上面的結果中剝離python字符串中的最後一個0?

我是一個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 2009-12-08 04:56:28

+0

我們已經成功了:print subprocess.Popen([「xsel」],stdout = subprocess.PIPE).stdout.read() – torger 2009-12-08 04:57:14

+0

我假設您確實需要能夠捕獲xsel的輸出,而不僅僅是打印到終端 – 2009-12-08 04:59:08

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打印「條目」.rstrip(「0entry」) - 似乎工作,但不是那麼優雅。 – torger 2009-12-08 04:43:07

+0

試過 - AttributeError:'int'對象沒有屬性'rstrip' - 問題的原因。 – torger 2009-12-08 04:48:15

+0

得到同樣的錯誤,這就是爲什麼我做了我上面做的。 – torger 2009-12-08 04:51:22

2

它看起來對我來說,它是運行「XSEL」,這是印刷它的結果stdout,然後將返回碼(0)打印到標準輸出。你沒有從python獲取剪輯結果。

你可能想要subprocess.popen並捕獲標準輸出。

1

如果零總是在字符串的末尾,所以您只需要刪除最後一個字符,只需執行st=st[:-1]即可。或者,如果您不確定最終會有零點,則可以執行if st[-1]==0: st=st[:-1]

4

編輯subprocess.call沒有返回一個字符串,而是一個int - 用於0你看到(XSEL的實際輸出後)。使用,而不是:

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

迷失半結腸。 – torger 2009-12-08 04:58:39

+0

TypeError:'int'object is unsubscriptable - 我不知道我在做什麼錯誤 - 也許它是調用發出數據的方式。 – torger 2009-12-08 05:02:52

2

0和新進料線在每行是由Python打印命令,其中零是從subprocess.call殼返回代碼印刷的唯一的東西。 shell首先首先將結果打印到標準輸出,這就是爲什麼你看到這個詞。

編輯:請參閱標記的突然顯示的意見。