2
#!/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 を返す理由はわかりませんが、文字列ストリップ (int にはストリップがない) を使用できないようです。したがって、0 は文字列を整数にしますか?

上記の結果の python 文字列から最後の 0 を削除するにはどうすればよいですか?

私は Python に変換する BASH スクリプターです。

4

6 に答える 6

4

編集:subprocess.call文字列ではなくintを返し0ます-これは(xselの実際の出力の後に)表示されます。代わりに次を使用します。

print subprocess.Popen('xsel', stdout=subprocess.PIPE).communicate()[0]
于 2009-12-08T04:45:02.807 に答える
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)
于 2009-12-08T04:54:24.090 に答える
2

"copied0".rstrip("0")動作するはずです

実際には、このようにしたほうがいいです。画面にリターン コードが表示されません。

import os, sys, subprocess, time
while True:    
    _ = subprocess.call("dir", shell=True);
    time.sleep(1);
于 2009-12-08T04:36:59.827 に答える
2

結果を標準出力に出力し、次にリターンコード(0)を標準出力に出力する「xsel」を実行しているように見えます。Python からクリップの結果を取得していません。

おそらく、subprocess.popen が必要であり、stdout をキャプチャする必要があります。

于 2009-12-08T04:42:44.933 に答える
2

各行の0と 新しい改行は、python print コマンドによって出力される唯一のものです。ここで、ゼロは からのシェル リターン コードですsubprocess.call。シェル自体が最初に結果を最初に stdout に出力するため、この単語が表示されます。

編集:エピファニーについては、S Markの投稿のコメントを参照してください.

于 2009-12-08T04:54:09.893 に答える
1

ゼロが常に文字列の最後にあり、常に最後の文字を削除したい場合は、単にst=st[:-1].

または、最後にゼロがあるかどうかわからない場合は、 を実行できますif st[-1]==0: st=st[:-1]

于 2009-12-08T04:43:28.957 に答える