开发者

using a python list as input for linux command that uses stdin as input

开发者 https://www.devze.com 2023-04-11 21:34 出处:网络
I am using python scripts to load data to a database bulk loader. The input to the loader is stdin. I have been unable to get the correct syntax to call the unix based bulk loader passing the conten

I am using python scripts to load data to a database bulk loader.

The input to the loader is stdin. I have been unable to get the correct syntax to call the unix based bulk loader passing the contents of a python list to be loaded.

I have been reading about Popen and PIPE but they have not been behaving as i expect.

The python list contains database records to be bulkloaded. In linux it would look similar to this:

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

What would be the correct way replace the echo statement with a python list to be used with this command ?

I do not have sample code for this process as i have been experimenting with the features of Popen and PIPE with some开发者_运维问答 very simple syntax and not obtaining the desired result.

Any help would be very much appreciated.

Thanks


If your data is short and simple, you could preformat the entire list and do it simple with subprocess like this:

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

If the data is too big to preformat like this, then you can attempt to use the stdin pipe directly, though subprocess module is flaky when using the pipes if you need to read from stdout/stderr too.

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号