Python子输出到subprocess中的控制台scricpt

在我的父母脚本中,我执行以下操作:

fout=open(outfile,"w") ferr = open(errfile,"w") subprocess.call("1.py",stdout=fout,stderr=ferr,shell=True) 

1.py脚本中,我希望大部分日志消息都转到日志文件,但是有一些消息,我想根据打印条件在控制台上打印:

 print "Hello World" 

但它打印outfile,我想要在控制台上打印,我试着做

 sys.__stdout__.write("Hello World"); 

但是这也行不通。 任何帮助将不胜感激!

如果stdout,stderr被redirect,那么你可以尝试直接打印到控制台:

 try: # Windows from msvcrt import putwch def print_to_console(message): for c in message: putwch(c) # newline putwch('\r') putwch('\n') except ImportError: # Unix import os fd = os.open('/dev/tty', os.O_WRONLY | os.O_NOCTTY) tty = os.fdopen(fd, 'w', 1) del fd def print_to_console(message, *, _file=tty): print(message, file=_file) del tty 

例:

 print_to_console("Hello TTY!") # -> Hello TTY! 

如果你在控制1.py ,你可以拥有你自己的stdoutstderr实例。或者你也可以不把stdout / stdinredirect到1.py ,而是将fout/ferr作为parameter passing给它。 就像是:

 # assuming python 2.7.x from __future__ import print_function import argparse import sys if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--stdout' , nargs='?' , type=argparse.FileType('a') , default=sys.stdout) parser.add_argument( '--stderr' , nargs='?' , type=argparse.FileType('a') , default=sys.stderr) namespace = parser.parse_args() print("Hello There", file=namespace.stdout) print("Error time", file=namespace.stderr) print("Always to stdout") print("Always to stderr", file=sys.stderr) 

然后像这样运行它:

 python 1.py --stdout=outfile.log stderr=errfile.log 

subprocess调用:

 subprocess.call("1.py",shell=True) # no need to redirect stdout and stderr now