ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2019-11-02 05:58:13  阅读:249  来源: 互联网

标签:stdin popen python pipe


我正在使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有