为什么我通过stderr而不是stdout捕获子进程输出?

时间:2015-03-05 11:02:46

标签: python python-2.7 python-3.x

我正在通过子进程运行PSExec工具。如果psexec(不是远程计算机上的工具)无法启动,我需要打破。因此,我正在捕获文件中的所有命令提示输出并解析它:

logfile = file('Ocd_Log.txt','w')

try:

  process = subprocess.Popen(r'"C:\Program Files (x86)\PSTools\PsExec.exe" -s -i 1 -d -u administrator -p pwd \\10.200.20.20 cmd.exe /k "C:\Osprey_OCD_Daemon_xtensa_9.lnk"', stdout = subprocess.PIPE,stderr = subprocess.PIPE)

  for line in process.stderr:
    print ' '
    sys.stderr.write(line)
    logfile.write(line)
   process.wait()

上面的代码运行良好,并将所有命令行捕获到日志文件中。但我无法理解为什么我需要通过process.stderr捕获输出而不是process.stdout。请告诉我。

1 个答案:

答案 0 :(得分:1)

程序选择stdout或stderr(在你的情况下是PsExec.exe,你不能修复它)。通常,stderr用于调试数据,它正是日志文件!