为什么使用 os.popen 时最后一行是空的

jes*_*ica 1 python linux python-3.x apache-kafka

我正在使用这个 Python (Python 3) 代码,以便获取所有主题的列表

\n

作为:

\n
more test.py\n\nlist = os.popen(" kafka-topics.sh \xe2\x80\x93zookeeper zoo_server:2181 --list | sed '/^[[:space:]]*$/d'  ").read().split('\\n')\nprint (list)\n
Run Code Online (Sandbox Code Playgroud)\n

当我运行 python 脚本时,我注意到最后一行如下所示

\n
\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\n\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6.'topic32', 'topic33', 'topic34 , \xe2\x80\x98 \xe2\x80\x98]\n
Run Code Online (Sandbox Code Playgroud)\n

所以最后一个单词实际上是空的,因为在单引号之间,因为\xe2\x80\x98 \xe2\x80\x98我们没有主题名称

\n

这很奇怪,因为在行中我使用 sed -sed '/^[[:space:]]*$/d'来删除空行,并且当我运行以下命令时实际上不是空行

\n
kafka-topics.sh \xe2\x80\x93zookeeperzoo_server:2181 --list | sed '/^[[:space:]]*$/d'  \n
Run Code Online (Sandbox Code Playgroud)\n

我的 Python 行有什么问题吗?

\n

例如,当我跑步时

\n
kafka-topics.sh \xe2\x80\x93zookeeper zoo_server:2181 --list | sed '/^[[:space:]]*$/d'\n\ntopic1\ntopic2\ntopic3\n.\n.\n.\n
Run Code Online (Sandbox Code Playgroud)\n

che*_*ner 5

这其实跟没有什么关系popen。返回的字符串read以换行符结尾。

>>> "foo\nbar\n".split()
['foo', 'bar', '']
Run Code Online (Sandbox Code Playgroud)

如果您不希望最后一个换行符后面有空字符串,则应首先删除最后一个换行符。

list = os.popen(...).read().rstrip('\n').split('\n')
Run Code Online (Sandbox Code Playgroud)