gpt4 book ai didi

python - 使用 python 列表作为使用 stdin 作为输入的 linux 命令的输入

转载 作者:太空狗 更新时间:2023-10-30 02:49:33 25 4
gpt4 key购买 nike

我正在使用 python 脚本将数据加载到数据库批量加载程序。

加载器的输入是标准输入。我一直无法获得正确的语法来调用基于 unix 的批量加载器,传递要加载的 python 列表的内容。

我一直在阅读有关 Popen 和 PIPE 的内容,但它们的行为并不像我预期的那样。

python 列表包含要批量加载的数据库记录。在 Linux 中,它看起来类似于:

echo "this is the string being written to the DB" | sql -c "COPY table FROM stdin"

将 echo 语句替换为与此命令一起使用的 python 列表的正确方法是什么?

我没有此过程的示例代码,因为我一直在使用一些非常简单的语法试验 Popen 和 PIPE 的功能,但没有获得所需的结果。

非常感谢任何帮助。

谢谢

最佳答案

如果您的数据短而简单,您可以预先格式化整个列表,并使用这样的子流程来简化它:

import subprocess
data = ["list", "of", "stuff"]
proc = subprocess.Popen(["sql", "-c", "COPY table FROM stdin"], stdin=subprocess.PIPE)
proc.communicate("\n".join(data))

如果数据太大而无法像这样预格式化,那么您可以尝试直接使用 stdin 管道,但如果您还需要从 stdout/stderr 读取数据,则子进程模块在使用管道时会不稳定。

for line in data:
print >>proc.stdin, line

关于python - 使用 python 列表作为使用 stdin 作为输入的 linux 命令的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7720220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com