subprocess.call记录器信息和stdout和stderr的错误

时间:2015-04-23 13:04:15

标签: python

我有一个记录器。我在呼唤外部流程。我从该过程中单独捕获stdout和stderr,以便我可以记录它们。

我有这个错误:

  

回溯(最近一次调用最后一次):文件“importData.py”,第198行,   在       IMPORTDATA(ftpServerName,ftpU,FTPP,目录filematch,源,目的地)   在importData中的文件“importData.py”,第99行       p = subprocess.Popen(['mongoimport --db AutoPrivilege -c cars stockvo.json --jsonArray --upsert --drop'],stdout = subprocess.PIPE,   stderr = subprocess.PIPE)文件“/usr/lib/python2.7/subprocess.py”,   第710行,在 init 中       errread,errwrite)文件“/usr/lib/python2.7/subprocess.py”,第1335行,在_execute_child中       raise child_exception OSError:[Errno 2]没有这样的文件或目录

我的剧本:

...
        #import json file to MongoDB
        logger.info(' Import json file to MongoDB')
        #subprocess.call('mongoimport --db AutoPrivilege -c cars stockvo.json --jsonArray --upsert --drop',shell=True)
        p = subprocess.Popen(["mongoimport --db AutoPrivilege -c cars stockvo.json --jsonArray --upsert --drop"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        stdout, stderr = p.communicate()

        if stdout:
            logger.info(stdout)
        if stderr:
            logger.error(stderr)
...

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

subprocess.Popen构造函数接受args列表,而不是字符串:

p = subprocess.Popen(['mongoimport', '--db', 'AutoPrivilege', '-c',
                      'cars', 'stockvo.json', '--jsonArray', '--upsert',
                      '--drop'])...