首页 > 解决方案 > 工作目录由 cwd 更改的 python subprocess.run 不起作用

问题描述

我正在尝试使用python 子进程来调用exe。应用程序通常从与 exe 相同的目录中获取参数文件。但是由于python文件和exe不在同一个目录下,所以在subprocess.run调用时exe找不到参数文件。因此,我在调用 subprocess.run 时指定了cwd ,如下所示:

subprocess.run([cwd_exe, "--cal-cn-bv", cwd_cif, "Cs1"], cwd=r'd:\Study\softBV_mix\GitHub\projects\Coord\bin', capture_output=True)

但是子进程仍然找不到 dat 文件

d:\Study\softBV_mix\GitHub\projects\Coord\bin

错误消息显示为

CompletedProcess(args=['d:\Study\softBV_mix\GitHub\projects\Coord\bin/softBV0405.exe', '--cal-cn-bv', 'd:\Study\softBV_mix\GitHub\projects\Coord\ test/CsCl.cif', 'Cs1'], returncode=0, stdout=b'警告:无法找到 d:\Study\softBV_mix\GitHub\projects\Coord\database_unitary.dat

database_unitary.dat 应该在.../coord/bin/ 中。如果我从 powershell 或命令提示符调用它,该应用程序运行良好。

标签: pythonsubprocessexecwd

解决方案


没有人回答我的问题,但我自己找到了解决方法,尽管我确定我是否正确识别了根本原因。

最后我导入了 os 并确保 cwd 是公认的绝对地址

导入操作系统

cwd = os.path.abspath("../bin")

这成功了。

所以表达式

r'd:\Study\softBV_mix\GitHub\projects\Coord\bin'

造成问题。希望一些PRO可以进一步澄清这一点。


推荐阅读