English 中文(简体)
Strip final 0 off a python string
原标题:
#!/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.

最佳回答

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)
问题回答

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].





相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签