我一直在编写一个小的Python脚本,它使用subprocess模块和辅助函数执行一些shell命令:
import subprocess as sp
def run(command, description):
"""Runs a command in a formatted manner. Returns its return code."""
start=datetime.datetime.now()
sys.stderr.write('%-65s' % description)
s=sp.Popen(command, shell=True, stderr=sp.PIPE, stdout=sp.PIPE)
out,err=s.communicate()
end=datetime.datetime.now()
duration=end-start
status='Done' if s.returncode==0 else 'Failed'
print '%s (%d seconds)' % (status, duration.seconds)
Run Code Online (Sandbox Code Playgroud)
以下行读取标准输出和错误:
s=sp.Popen(command, shell=True, stderr=sp.PIPE, stdout=sp.PIPE)
out,err=s.communicate()
Run Code Online (Sandbox Code Playgroud)
如您所见,未使用stdout和stderr.假设我想以格式化的方式将输出和错误消息写入日志文件,例如:
[STDOUT: 2011-01-17 14:53:55] <message>
[STDERR: 2011-01-17 14:53:56] <message>
Run Code Online (Sandbox Code Playgroud)
我的问题是,最恐怖的方式是什么?我想到了三个选择:
write方法.write.PIPE某种方式连接到自身.更新:参考测试脚本
我正在使用此脚本检查结果,保存为test.py:
#!/usr/bin/python
import sys
sys.stdout.write('OUT\n')
sys.stdout.flush()
sys.stderr.write('ERR\n')
sys.stderr.flush() …Run Code Online (Sandbox Code Playgroud) 如果我subprocess用给定的命令在python中生成一个新的(假设我用python命令启动python解释器),我如何将新数据发送到进程(通过STDIN)?