我正在尝试使用python子进程来调用exe。应用程序通常从与exe相同的目录中获取参数文件。但是,由于python文件与exe不在同一目录下,当子进程调用exe时,exe找不到参数文件。运行。因此,我在调用个子进程时指定了cwd
subprocess.run([cwd_exe, "--cal-cn-bv", cwd_cif, "Cs1"], cwd=r'd:StudysoftBV_mixGitHubprojectsCoordbin', 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或命令提示符调用该应用程序,它会运行良好。
没有人回答我的问题,但我自己找到了解决方法,尽管我确信我是否正确地确定了根本原因。
最后,我导入了os,并确保cwd是公认的绝对地址
导入
cwd=os.path.abspath("../bin"(
这很成功。
因此表达式
r'd:\Study\softBV_mix\GitHub\projects\Coord\bin'
引起问题。希望一些PRO能够进一步澄清这一点。