当我从 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.2\nconnecting to: mongodb://127.0.0.1:27017\nMongoDB server version: 3.4.2\ndb.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)
关于python - 通过 Python 脚本使用 mongo --eval 命令时未评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46564840/