【问题标题】:subprocess.call logger info and error for stdout and stderr标准输出和标准错误的 subprocess.call 记录器信息和错误
【发布时间】:2015-07-01 16:33:29
【问题描述】:

我有一个记录器。我正在调用一个外部进程。我从该进程中分别捕获标准输出和标准错误,以便我可以记录它们。

我有这个错误:

Traceback(最近一次调用最后一次):文件“importData.py”,第 198 行, 在 importData(ftpServerName,ftpU,ftpP,目录,文件匹配,源,目标) 文件“importData.py”,第 99 行,在 importData 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)
...

有办法解决吗?

【问题讨论】:

    标签: python


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 2014-07-22
      相关资源
      最近更新 更多