遇到了一个奇怪的bug,我写了一个python爬虫脚本,运行之后会爬几个数据然后写进一个excel文件里的新一行。因为运行环境是客户机没有python,我把这个爬虫脚本打包成了一个exe。
经测试从文件夹里直接打开这个爬虫脚本exe,正常运行,excel文件里也正常的多写入一行数据。此为背景。
但是有新需求,需要把这个爬虫的功能嵌入到一个winform里边去,在winform里用代码调这个爬虫脚本exe试了一下,同样可以正常运行爬虫脚本程序,没报错,但是却没有在excel里写进去数据,代码是
private void buttonStart_Click(object sender, EventArgs e)
{
Process.Start("C:\\Users\\ZhuMengfeng\\Documents\\MyCode\\IronPricePythonSpider\\0.8\\dist\\SpiderIronPrice.exe").WaitForExit();
}
求解答!
可以试试看不用偷懒的Process
先一步步写
process p=new Process()
p.startinfo.WorkingDirectory = “python exe所在目录”
因为默认偷懒写,没有指明工作目录位置,所以他默认以你现在这winform程序目录为工作目录,此时如果你的python里读写excel用的是相对路径,那么此时运行期实际就是以winform目录做相对参考,你有可能找不到那个excel文件或者其他相关依赖
具体说明:我随手百度一篇
https://www.cnblogs.com/Manuel/p/14184000.html
因为路径变了
路径有三种,文件目录、启动目录、工作目录
文件目录就是你exe文件所在的目录
启动目录是调用此exe的目录,如果是鼠标双击打开的,那么它跟exe所在目录相同
工作目录则随时会变,比如你显示了一个文件选择器,用户选择了文件之后工作目录就会变成这个目录
工作目录默认是启动目录,而你拼接相对路径时用的其实是工作目录
当你利用外部程序调用这个exe的时候,此时目录变成了外部程序的工作目录,在这个目录下找不到你的excel文件
你应该使用文件目录,也就是利用__file__变量去拼接目录