【问题标题】:Unable to run subprocess and also redirecting output to a log file无法运行子进程并将输出重定向到日志文件
【发布时间】:2015-03-16 07:15:57
【问题描述】:

以下代码不会写入我正在创建的日志文件 (Dm_Log.txt)。但是,如果我注释掉 stdout,stderr = process.communicate() 那么它确实如此。如果我不使用通信,子进程会停止,因为我正在执行 process.wait()。如何解决这个问题?我也需要写入日志文件并运行该过程。

  logfilePath = self.psexeclogs + 'Dm_Log.txt'
  logfile = file(logfilePath,'w')

  try:

   process = subprocess.Popen(drivemaster_open_command, stdout = subprocess.PIPE,stderr = subprocess.PIPE)
   stdout, stderr = process.communicate()

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

  except OSError:
    print "********COULD NOT FIND PSEXEC.EXE, PLEASE REINSTALL AND SET THE PATH VARIABLE PROPERLY********\n"

  #Close the logfile first
  logfile.close()

【问题讨论】:

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


    【解决方案1】:

    在你使用communicate作为它等待进程终止之后,你就不能使用process.stderr,而你可以使用stderr

    Popen.communicate(input=None)

    与进程交互:将数据发送到标准输入。从 stdout 和 stderr 读取数据,直到到达文件结尾。等待进程终止

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

    【讨论】:

      猜你喜欢
      • 2020-11-17
      • 2016-01-22
      • 2016-08-25
      • 2014-03-24
      • 2016-10-07
      • 2018-01-11
      • 1970-01-01
      • 2019-03-20
      相关资源
      最近更新 更多