这里非常绿色,只是编写代码片段来学习 python
我把下面的放在一起看处理命令返回
测试.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,这就是输出变量中的全部内容?
附注我知道有 python 库可用于获取系统时间/日期,但这更多是关于我学习 python 语句和子进程。
编辑:我应该补充一点,即使没有“wc -l”,它仍然会从 date 命令返回 58 个完整返回值。
编辑:如果我用“ls”替换“date”,它会完整地运行“ls”命令两次。
编辑:另一个例子,如果我使用“whoami”,它会返回我的用户名 7 次?
最佳答案
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
>>>
关于Python for x 循环返回不止一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31458222/