【发布时间】:2012-02-24 18:06:33
【问题描述】:
我正在尝试通过 KennethReitz 的 Envoy 包运行此命令:
$ sqlite3 foo.db 'select * from sqlite_master'
我试过了:
r = envoy.run("sqlite3 foo.db 'select * from sqlite_master'")
sqlite3: Error: too many options: "*"
还有这个:
r = envoy.run(['sqlite3', 'foo.db', 'select * from sqlite_master'])
AttributeError: 'NoneType' object has no attribute 'returncode'
额外的引用和转义似乎没有帮助。有什么建议吗?
仅供参考:这是我现在必须做的:
cmd = "sqlite3 %(database)s 'select * from sqlite_master'" % locals()
os.system(cmd)
请注意,这是一个人为的示例,我想发出的大多数 unix shell 命令不仅仅是可以通过 SQLAlchemy 轻松完成的简单选择。
【问题讨论】:
-
sqlite3 模块包含在 python 的标准库中。 docs.python.org/library/sqlite3.html 这样你就可以更直接地访问数据库中的数据了。
-
谢谢 - 我同意,我主要使用 sqlalchemy。但我还必须运行相当多的 shell 命令,这些命令需要 subprocess、os.system、popen 或 envoy。我希望确认 Envoy 可以处理这些简单的命令。
-
您可以将它们编写为单个脚本,然后使用多处理模块将它们分离出来。
-
是的,这会使生成命令变得更加困难。我想要一些灵活性。这要求不高,人们经常使用 perl 或 python 使用 popen、os.system() 等来做到这一点。
标签: python python-envoy