我正在尝试从主脚本调用 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: argument 1 must be convertible to a buffer, not DataFrame
这是我第一次尝试使用 subprocess 模块,所以我还不太擅长。任何帮助都感激不尽。
下面是主脚本和子进程之间双向通信的 Python 3.6 的完整示例。
master.py
import pandas as pd
import pickle
import subprocess
df = pd.read_excel(r'C:\test_location\file.xlsx',sheetname='Table')
result = subprocess.run(['python', 'call_model.py'], input=pickle.dumps(df), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
returned_df = pickle.loads(result.stdout)
assert df == returned_df
如果有问题可以检查一下result.stderr
.
子程序.py
import pickle
import sys
data = pickle.loads(sys.stdin.buffer.read())
sys.stdout.buffer.write(pickle.dumps(data))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)