这里非常绿色,只是编写代码片段来学习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',它会返回我的用户名七次?
答案 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
>>>