我正在尝试从主脚本调用python脚本.我需要从主脚本中仅生成一个数据帧,然后将其作为参数传递给子流程脚本,以在子流程中使用.
以下是我尝试编写所需的python主脚本的尝试.
from subprocess import PIPE, Popen
import pandas as pd
test_dataframe = pd.read_excel(r'C:\test_location\file.xlsx',sheetname='Table')
sp = Popen(["python.exe",'C:/capture/test.py'], shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
sp.communicate(test_dataframe)
这是错误:
TypeError:参数1必须可转换为缓冲区,而不是DataFrame
这是我第一次尝试使用子流程模块,所以我还不是很擅长.任何帮助都感激不尽.
解决方法:
子进程启动另一个应用程序.进程之间可能进行通信的方式与python程序中函数进行通信的方式大不相同.您需要通过非pythonic环境传递DataFrame.因此,您需要将其序列化为文本,然后在另一端反序列化.例如,您可以使用pickle模块,然后在一端使用sp.communicate(pickle.dumps(test_dataframe))在另一端使用pickle.loads(sys.stdin.read()).或者,您可以将DataFrame编写为csv,然后再次对其进行解析.或者,您可以使用其他任何格式.