Mongo-通过Python脚本使用时未评估eval命令



当我从bash终端运行此命令时,我得到了预期的结果:

$ mongo --eval "db.getMongo().getDBNames()"
> MongoDB shell version v3.4.2
> connecting to: mongodb://127.0.0.1:27017
> MongoDB server version: 3.4.2
> [ "admin", "local" ]

我需要从Python脚本运行此命令。这就是我写的:

import subprocess
cmd = ['mongo', '--eval', '"db.getMongo().getDBNames()"']
result = subprocess.check_output(cmd)
print(result)

这是运行此脚本时的结果:

$ python3 log.py
> b'MongoDB shell version v3.4.2nconnecting to: mongodb://127.0.0.1:27017nMongoDB server version: 3.4.2ndb.getMongo().getDBNames()n'

您可以看到,除了显示原始命令db.getMongo().getDBNames()而不是预期的结果[ "admin", "local" ]之外,这几乎是同一件事。

我的脚本中是否有错误?

尝试一下。让我解释一下 - 默认情况下,check_output具有默认值shell=False,因此它自己逃脱了命令的原因。

import subprocess
cmd = ['mongo', '--eval', 'db.getMongo().getDBNames()']
result = subprocess.check_output(cmd)
print(result)

相关内容

最新更新