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

我正在使用python脚本将数据加载到数据库批量加载器.

加载程序的输入是stdin.我一直无法获得正确的语法来调用基于Unix的批量加载器,并传递要加载的python列表的内容.

我一直在阅读有关Popen和PIPE的信息,但它们的表现却不尽如人意.

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

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

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

我没有此过程的示例代码,因为我已经使用一些非常简单的语法尝试了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

标签:stdin,popen,python,pipe

来源: https://codeday.me/bug/20191102/1989023.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值