我试图通过使用 subproccess.popen 调用从一个程序 (program1) 运行代码。程序 2(被调用的那个)不显示记录器语句。在下面的示例代码中,program1 调用 program2 并为每个代码设置日志记录。
程序1.py
import subprocess
import logging
import sys
def configure_logging(name):
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s:%(name)s:%(message)s")
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
return logger
logger = configure_logging(__name__)
python_path = "Path/to/specific/pythonexe"
py_path = "Path/to/program2.py"
cmd = "{} {}".format(python_path,py_path)
logger.info("Cmd: {}".format(cmd))
cmd = cmd.split()
proc = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True)
程序2.py
import logging
def logstuff(name):
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s:%(name)s:%(message)s")
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
return logger
def main():
logger.info("hi")
print("hi2")
if __name__ == "__main__":
logger = logstuff(__name__)
main()
使用上面的设置 program1 调用 program2 但 logger.info 语句不会打印出来,只有 print() 语句是。
我无法导入 program2,因为它依赖于封装在 anaconda 环境中的特定 python 版本。
我想要的输出是将 logger.info 和任何后续记录器调用打印到终端,那么我将如何实现这一目标?
我相信你搞砸了记录器设置。还有带有 stdout PIPE 的 subprocess.Popen 等对我不起作用。这是我在本地工作的内容,希望对您有所帮助。
程序1.py
import logging
import subprocess
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s:%(name)s:%(message)s')
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
python_path = 'python'
py_path = 'program2.py'
cmd = '{} {}'.format(python_path, py_path)
logger.info('Cmd: {}'.format(cmd))
cmd = cmd.split()
subprocess.call(cmd)
程序2.py
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s:%(name)s:%(message)s')
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
def main():
logger.info('hi program2 here')
if __name__ == '__main__':
main()
输出:
$ python program1.py
2018-11-14 15:38:53,905:__main__:Cmd: python program2.py
2018-11-14 15:38:53,917:__main__:hi program2 here
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句