将 Pandas 数据框导出到子进程作为标准输入
Export Pandas Dataframe to subprocess as stdin
我正在使用 python 查询 impala 数据库,return SQL 查询的结果作为数据框。我想将该数据帧作为 stdin 传递给对另一个程序的子进程调用,但不知道如何进行。
# create dataframe from query results
query_df = cur.execute(sql_query)
# create subprocess command
subprocess_cmd = r'''{} | java -Xmx16g -jar snpeff.jar -t GRCh37.75 > out_file}'''.format(query_df)
# run the subprocess command
ps = sp.Popen(subprocess_cmd, shell=True, stdout=sp.PIPE, stderr=sp.PIPE, cwd=os.getcwd())
try:
print ps.communicate()
except sp.CalledProcessError as e:
print e
我可以将 pandas 数据帧打印到标准输出,如下所示:
query_df.to_csv(sys.stdout, sep='\t')
但我不知道如何将它输入子流程,或者我是否在正确的轨道上。在此先感谢您的帮助!
可能您必须在 csv 文件中显式写入 query_df 内容,然后告诉子进程它可以从哪里获取数据。
# write to a file
query_df.to_csv('test.csv', sep='\t')
# create subprocess command
subprocess_cmd = r'''cat test.csv | java -Xmx16g -jar snpeff.jar -t GRCh37.75 > out_file}'''.format(query_df)
或者您确定要使用标准输出?
好的,我用 stdin 找到了决定:)
# create subprocess command
subprocess_cmd = r'''java -Xmx16g -jar snpeff.jar -t GRCh37.75 > out_file}'''.format(query_df)
# run the subprocess command
ps = sp.Popen(subprocess_cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=os.getcwd())
try:
print ps.communicate(query_df.to_csv(sep='\t'))
except sp.CalledProcessError as e:
print e
请尝试一下。
我正在使用 python 查询 impala 数据库,return SQL 查询的结果作为数据框。我想将该数据帧作为 stdin 传递给对另一个程序的子进程调用,但不知道如何进行。
# create dataframe from query results
query_df = cur.execute(sql_query)
# create subprocess command
subprocess_cmd = r'''{} | java -Xmx16g -jar snpeff.jar -t GRCh37.75 > out_file}'''.format(query_df)
# run the subprocess command
ps = sp.Popen(subprocess_cmd, shell=True, stdout=sp.PIPE, stderr=sp.PIPE, cwd=os.getcwd())
try:
print ps.communicate()
except sp.CalledProcessError as e:
print e
我可以将 pandas 数据帧打印到标准输出,如下所示:
query_df.to_csv(sys.stdout, sep='\t')
但我不知道如何将它输入子流程,或者我是否在正确的轨道上。在此先感谢您的帮助!
可能您必须在 csv 文件中显式写入 query_df 内容,然后告诉子进程它可以从哪里获取数据。
# write to a file
query_df.to_csv('test.csv', sep='\t')
# create subprocess command
subprocess_cmd = r'''cat test.csv | java -Xmx16g -jar snpeff.jar -t GRCh37.75 > out_file}'''.format(query_df)
或者您确定要使用标准输出?
好的,我用 stdin 找到了决定:)
# create subprocess command
subprocess_cmd = r'''java -Xmx16g -jar snpeff.jar -t GRCh37.75 > out_file}'''.format(query_df)
# run the subprocess command
ps = sp.Popen(subprocess_cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=os.getcwd())
try:
print ps.communicate(query_df.to_csv(sep='\t'))
except sp.CalledProcessError as e:
print e
请尝试一下。