【问题标题】:How do I execute Cassandra CLI commands from a Python script?如何从 Python 脚本执行 Cassandra CLI 命令?
【发布时间】:2012-11-13 01:35:42
【问题描述】:

我有一个 python 脚本,我想用它在服务器上进行远程调用、连接到 Cassandra CLI 并执行命令来创建键空间。我所做的其中一项尝试就是达到这个效果:

connect="cassandra-cli -host localhost -port 1960;"
create_keyspace="CREATE KEYSPACE someguy;"
exit="exit;"

final = Popen("{}; {}; {}".format(connect, create_keyspace, exit), shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
stdout, nothing = final.communicate()

查看各种解决方案,我没有找到我需要的东西。例如,上面的代码抛出了“/bin/sh: 1: CREATE: not found”,我认为意味着它没有在 CLI 命令行上执行 CREATE 语句。

任何/所有帮助将不胜感激!谢谢!

【问题讨论】:

标签: python cassandra subprocess command-line-interface


【解决方案1】:

试试这个。我的机器上没有安装 cassandra-cli,所以无法自己测试。

from subprocess import check_output
from tempfile import NamedTemporaryFile
CASSANDRA_CMD = 'cassandra-cli -host localhost -port 1960 -f '

def cassandra(commands):
    with NamedTemporaryFile() as f:
        f.write(';\n'.join(commands))
        f.flush()
        return check_output(CASSANDRA_CMD + f.name, shell=True)

cassandra(['CREATE KEYSPACE someguy', 'exit'])

正如您在下面的评论中提到的,pycassa a Python client for Cassandra 无法使用,因为它似乎不支持 create 语句。

【讨论】:

  • 好指针 - 我将调用 pycassa 客户端,避免任何管道。 (这是我开始的地方,然后摇摆不定)谢谢! sys = SystemManager('localhost:9160') sys.create_keyspace('someguy', SIMPLE_STRATEGY, {'replication_factor': '1'}) sys.close()
  • 我更新了答案。我很确定这应该有效。它使用了他们文档中的 -f 选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多