如何重定向Win cmd输出“live”而不是等待

问题描述 投票:0回答:1

1)我需要在Python上运行Windows 7上的外部程序,并将“实时”输出(不需要STDERR)重定向到文件调用log.txt。最好是附加,而不是覆盖。 2)这个外部程序会不时地将事件记录到我的输出文件log.txt中。 3)我不希望我的python脚本等待#1和#2发生。换句话说,我希望我的python脚本执行#1和#2并返回以便我可以做其他事情。

我试过跟不上运气,1)'|&tee~'2)'>>'3)

使用open(fileName,'w')作为fout:subprocess.call(command,stdout = fout)

以上所有尝试都导致我的代码等待。我需要以某种方式发出子进程而不是等待返回。有人可以帮我解决这个问题吗?

下面的代码会记录第一个子进程调用。但之后它不会从sendCmd()中记录任何内容。如果我要手动运行pdSniffer.py,它将登录到相同的Event.log文件。

def startListner():
  fileName =getScriptPath() +r'\Script\allscripts\eventLog.txt'
  path =getScriptPath() +r'\Script\allscripts\pdSniffer.py 198.168.1.101 '
  winCMD='C:\\Python27\\python ' +path
  fout =open(fileName,'w')
  subprocess.Popen(winCMD, stdout=fout)
  Delay(2000)
  sendCmd()
  Delay(360000)

def sendCmd():
  path =getScriptPath() +r'\Script\allscripts\sendCreateEvent.py 192.168.1.100 1041 1143 0 4 0'  
  p =subprocess.Popen(['C:\\Python27\\python', path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
windows python-2.7 cmd
1个回答
1
投票

你必须使用subprocess.Popen接口,除非你手动调用wait,否则它不会阻塞:

proc = subprocess.Popen(command, stdout=fout)
© www.soinside.com 2019 - 2024. All rights reserved.