如何将子进程调用输出存储到文件python

时间:2017-07-16 14:04:03

标签: python subprocess

我在bash中有一个脚本,我使用来自子进程的调用在python中运行。 我希望脚本输出(字符串)存储在一个文件中。我尝试使用

代码
import logging
logging.basicConfig(level=logging.DEBUG,
                    format='',
                    datefmt='',
                    filename='E:\FYP\FYPPP\AMAPT\log.txt',
                    filemode='w')=
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
logging.info(call("sh amapt.sh", shell=True))
logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')
logger1.debug('test.')
logger1.info('test1.')
logger2.warning('test2.')
logger2.error('test3.') 

但是将输出显示为我脚本的整数。检查图像 I want the yellow/green output text to be stored in file but it is storing 255 instead of this text from my script.

请指导我。

1 个答案:

答案 0 :(得分:0)

call返回脚本的返回码。您需要获取该过程的输出

logging.info(check_output("sh amapt.sh"))

注释:

  • 如果流程失败,您将获得例外
  • 您不需要shell=True

要获得输出,无论您使用Popen代替什么,例如:

logging.info(Popen("sh amapt.sh",stdout=PIPE,stderr=STDOUT).stdout.read())

添加的,stderr=STDOUT也允许在日志中获得标准错误。

或者从python 3.5开始,您可以使用subprocess.run()代替Popen

logging.info(run("sh amapt.sh",stdout=PIPE,stderr=STDOUT).stdout.read())