【问题标题】:Strip final 0 off a python string从 python 字符串中去除 final 0
【发布时间】:2009-12-08 04:34:32
【问题描述】:
#!/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 脚本编写者。

【问题讨论】:

    标签: python string integer subprocess popen


    【解决方案1】:

    正如 Mark 指出的,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)
    

    【讨论】:

    • 谢谢 XD - 所以我必须使用不同的子进程。
    • 我们成功了:print subprocess.Popen(["xsel"],stdout=subprocess.PIPE).stdout.read()
    • 我假设您确实需要能够捕获 xsel 的输出,而不仅仅是将其打印到终端
    • 从子进程的代码返回是问题所在。 0 成功。
    • 如果你想检查返回码它保存在p.returncode
    【解决方案2】:

    编辑subprocess.call 不是返回一个字符串,而是一个 int -- 你看到的 0 (在 xsel 的实际输出之后)。改用:

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

    【讨论】:

    • TypeError: 'int' object is unsubscriptable - 我不知道我做错了什么 - 也许是调用发出数据的方式。
    【解决方案3】:

    在我看来它正在运行“xsel”,它将其结果打印到标准输出,然后将返回码 (0) 打印到标准输出。您没有从 python 获得剪辑结果。

    您可能想要 subprocess.popen 并捕获标准输出。

    【讨论】:

      【解决方案4】:

      "copied0".rstrip("0") 应该可以工作

      其实你最好这样做,它不会在屏幕上显示返回码

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

      【讨论】:

      • 我需要像上面那样迭代地剥离它。我从你的帖子中创建了这个:entry = subprocess.call("xsel", shell=True); print "entry".rstrip("0entry") - 似乎有效,但不是那么优雅。
      • 试过了 - AttributeError: 'int' object has no attribute 'rstrip' - 问题的原因。
      • 不,0 来自 python print 命令,它是 subprocess.call 的返回码;-)
      • 你是对的!所以只需将该变量传递给其他地方。 :-)
      • 供以后参考,添加了另一个答案来解释这一点
      【解决方案5】:

      0 和每行的新换行符是 python print 命令打印的唯一内容,其中零是来自subprocess.call 的 shell 返回码。 shell 本身首先将它的结果打印到标准输出,这就是你看到这个词的原因。

      编辑:请参阅 S Mark 帖子中的 cmets 以获得顿悟。

      【讨论】:

        【解决方案6】:

        如果零总是在字符串的末尾,所以您只是希望删除最后一个字符,只需执行st=st[:-1]

        或者,如果您不确定最后是否会出现零,您可以使用if st[-1]==0: st=st[:-1]

        【讨论】:

          猜你喜欢
          • 2010-10-19
          • 1970-01-01
          • 1970-01-01
          • 2017-05-24
          • 2013-09-23
          • 1970-01-01
          • 2015-07-30
          相关资源
          最近更新 更多