Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何通过STDIN将字符串传递到python脚本中正在执行的终端命令中?_Python 3.x_Postgresql_Stdin_Csvkit - Fatal编程技术网

Python 3.x 如何通过STDIN将字符串传递到python脚本中正在执行的终端命令中?

Python 3.x 如何通过STDIN将字符串传递到python脚本中正在执行的终端命令中?,python-3.x,postgresql,stdin,csvkit,Python 3.x,Postgresql,Stdin,Csvkit,我需要从数据帧生成postgres模式。我发现csvkit库非常接近匹配的数据类型。我可以通过终端运行csvkit,并在我的桌面上通过csv生成postgres模式,方法是使用文档中的以下命令: csvsql -i postgresql myFile.csv csvkit文件- 我可以通过以下代码在脚本中运行terminal命令: import os a=os.popen("csvsql -i postgresql Desktop/myFile.csv").read() 但是,我有一个数据

我需要从数据帧生成postgres模式。我发现csvkit库非常接近匹配的数据类型。我可以通过终端运行csvkit,并在我的桌面上通过csv生成postgres模式,方法是使用文档中的以下命令:

csvsql -i postgresql myFile.csv 
csvkit文件-

我可以通过以下代码在脚本中运行terminal命令:

import os
a=os.popen("csvsql -i postgresql Desktop/myFile.csv").read()
但是,我有一个数据框,我已将其转换为csv字符串,需要从字符串生成模式,如下所示:

csvstr = df.to_csv()
在文档中,它表示在位置参数下:

The CSV file(s) to operate on. If omitted, will accept
                        input on STDIN
如何将变量
csvstr
作为变量传递到code
a=os.popen(“csvsql-I postgresql csvstr”).read()的行中

我试图执行下面的代码行,但出现错误
OSError:[Errno 7]参数列表太长:'/bin/sh'

a=os.popen("csvsql -i postgresql {}".format(csvstr)).read()

提前谢谢你

你不能通过命令行传递这么大的字符串!您必须将数据保存到文件中,并将其路径传递到
csvsql

导入csv
csvstr=df.to_csv()
将open('my_cool_df.csv','w',newline='')作为csvfile:
csvwriter=csv.writer(csvfile)
csvwriter.writerows(csvstr)
后来:


我已经可以这样做了,并使用“to_csv('file/path')将数据帧直接写入csv。我真的很想传递一个字符串,这样我就可以接收其他数据源,并使过程更高效。您认为我可以用这种方式传递字符串吗?老实说,我不确定。请参阅将STDIN传递给csvkit的语法。stdin频道不同于参数列表,我认为你不应该达到极限。不过,我会测试性能,我不确定Python是否能比简单地保存和加载文件更快地处理这个问题。
a=os.popen("csvsql -i postgresql my_cool_df.csv")