Python for x循环返回多次

luk*_*uke 2 python subprocess

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

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

test.py

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

我运行它,它迭代58次:

python test.py | wc -l
58
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Dun*_*can 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

>>> 
Run Code Online (Sandbox Code Playgroud)