Question

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

Takes an entry from the clipboard and prints it, every 1 second.

Result:

copied0
entry0
from0
clipboard0

I do not know why it returns the final 0, but it apparently stops me from using string strip (int has not strip), hence the 0 makes the string an integer?

How can one strip final 0 off the python string in the result above?

I'm a BASH scripter converting to python.

Was it helpful?

Solution

As Mark pointed out, subprocess.call() does not do what you want

Something like this should work

#!/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)

OTHER TIPS

Edit: subprocess.call isn't returning a string, but an int -- that 0 you're seeing (after xsel's actual output). Use, instead:

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

It looks to me like it is running "xsel" which is printing its results to stdout, then printing the return code (0) to stdout. You are aren't getting the clip results from python.

You probably want subprocess.popen and to capture stdout.

"copied0".rstrip("0") should work

Actually, you better do like this, It wont show return code to the screen

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

The 0 and new line feed at each line are the only things printed by the python print command, where zero is the shell return code from subprocess.call. The shell itself first prints it results first to stdout, which is why you see the word.

Edit: See the comments in S Mark's post for the epiphany.

If the zero is always at the end of the string, and so you simply always want the last character removed, just do st=st[:-1].

Or, if you are not sure that there will be a zero at the end, you can do if st[-1]==0: st=st[:-1].

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top