Python for x循环返回多次

时间:2015-07-16 15:16:54

标签: python subprocess

这里非常绿色,只是编写代码片段来学习python

我把以下内容放在一起看处理命令返回

test.py

import subprocess
proc = subprocess.Popen('date', stdout=subprocess.PIPE)
output = proc.stdout.read()
for x in output:
        print output

我运行它,它重复58次:

python test.py | wc -l
58

为什么会这样,我无法理解为什么58具体?我原以为它只会返回1,这就是输出变量中的所有内容吗?

P.S。我知道有一些python库可以用来获取系统时间/日期,但这更多是关于我学习python语句和子进程。

编辑:我应该添加,即使没有'wc -l',它仍然会从date命令返回58个完整返回。

编辑:如果我用'ls'替换'date',它会完全运行'ls'命令两次。

编辑:另一个例子,如果我使用'whoami',它会返回我的用户名七次?

1 个答案:

答案 0 :(得分:6)

output是一个字符串(或者在Python 3中它是一个字节串)。迭代字符串/字节串将遍历各个字符。尝试print x查看实际迭代的内容。

您要为output中的每个字符打印一次output。字符串以'\n'结尾,因此您可以为字符串中的29个字符中的每个字符获得两行输出。这就是58来自的地方。

Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> proc = subprocess.Popen('date', stdout=subprocess.PIPE)
>>> output = proc.stdout.read()
>>> for x in output:
...         print output
... 
Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

Thu Jul 16 16:28:33 BST 2015

>>> 
相关问题