質問

#!/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は文字列、整数になり、それが最終的に0を返す理由を私は知らないが、それは明らかに(intはストリップされていない)は、文字列のストリップを使用してから私を停止する?

1は、上記の結果にPythonの文字列から外れ、最終的な0を取り除くことができますどのように?

私は、Pythonへの変換BASHのスクリプターです。

役に立ちましたか?

解決

マークが指摘したように、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が文字列を返すのではなく、int型 - 0あなたは(XSELの実際の出力の後に)見ています。代わりに、使用します:

print subprocess.Popen('xsel', stdout=subprocess.PIPE).communicate()[0]
それはその後、stdoutにリターンコード(0)を印刷、標準出力にその結果を印刷している「XSEL」を実行しているように、

これは、私には見えます。あなたは、Pythonからクリップ結果を取得されていませんされます。

あなたはおそらくsubprocess.popenとstdoutをキャプチャしたい。

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

実際には、あなたがより良い、このように、それは文句を言わない画面に戻りコードを表示します。

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

0と新しい改行がゼロsubprocess.callからシェルリターンコードであるPythonの印刷命令によって印刷唯一のものです。あなたが単語を参照してください理由は、それがstdoutに最初の結果のシェル自体最初の版画、ます。

編集:ひらめきのためにSマークの記事のコメントを参照してください。

ちょうどst=st[:-1]を行い、ゼロは文字列の末尾に常にあり、そしてあなたは、単にいつも最後の文字を削除したい場合。

それとも、あなたが最後にゼロがあるだろうことを確認していない場合、あなたはif st[-1]==0: st=st[:-1]を行うことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top