LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1473|回复: 3

os.system()或os.spawnlp()输出重定向?

[复制链接]
发表于 2006-3-2 11:58:28 | 显示全部楼层 |阅读模式
请问怎样将 os.system()、os.execlp() 或 os.spawnlp() 等的输出(sys.stdout)重定向到一个文件或一个List中(一行一个item)?


  1.       1 #!/usr/bin/python
  2.       2 # -*- coding: UTF-8 -*-
  3.       3
  4.       4 import os
  5.       5 import sys
  6.       6
  7.       7 class stdout:
  8.       8     def __init__(self):
  9.       9         self.result = []
  10.      10     def write(self, str):
  11.      11         self.result = str.split('\n')
  12.      12     def getlist(self):
  13.      13         return self.result
  14.      14
  15.      15 STDOUT = sys.stdout
  16.      16 sys.stdout = open('tmp', 'w')
  17.      17 os.system('ls -l')
  18.      18 # os.spawnlp(os.P_WAIT, 'ls', '')
  19.      19 tmp = sys.stdout
  20.      20 sys.stdout = STDOUT
  21.      21 # print tmp.getlist()
复制代码


上述使用对象或文件的方法都没有效果。

谢谢。
发表于 2006-3-2 14:58:47 | 显示全部楼层

  1. >>> f = os.popen(r'dir E:\irims\bin')
  2. >>> lines = f.readlines()
  3. >>> lines
  4. [' Volume in drive ....... ]
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-2 15:11:38 | 显示全部楼层
对,正好试了一下用 os.popen。

不过我现在还有进一步的需要,要使用 ssh。paramiko 模块我试了,但在传输大量文件时挂起,不知道是什么原因。

现在在考虑使用 pexpect 去调用 ssh/scp 命令,但显然也需要能够将其输出放到一个 List 中,这样才能知道取了那些文件。不知道具体应该怎么做?而且我这里好像上不了 pexpect.sourceforge.net,只找到一个0.999版本,新的版本找不到?

同时谢谢楼上兄弟的热心解答。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-2 15:29:05 | 显示全部楼层
L = [ S.strip('\n') for S in os.popen('ls').readlines() ]
这样似乎更好一点
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表