。该应用程序通常从与EXE同一目录中获取参数文件。但是,由于Python文件与EXE的目录不在同一目录中,因此EXE在由SubProcess.run调用时找不到参数文件。因此,我在调用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文件in
错误消息显示为completedProcess(args = ['d:\ soade \ softbv_mix \ github \ project \ project \ coord in/softbv0405.exe', ' - cal-cn-bv', 'd:\ study \ softbv_mix \ github \ project \ coord est/cscl.cif', 'cs1'],returnCode = 0,stdout = b'warning:找不到 D:\ study \ softbv_mix \ github \ projects \ coord \database_unitary.dat
database_unitary.dat应该在.../coord/bin/的地方。如果我从powershell或命令提示下调用它,则该应用程序效果很好。没有一个人回答了我的问题,但是我自己找到了解决方法,尽管我确定是否正确识别了根部原因。
最终我导入OS并确保CWD是公认的绝对地址
cwd= os.path.abspath(“ ../ bin”)
this练习
,所以表达式造成问题。希望有些专业人士可以进一步澄清这一点。r'd:\ study \ softbv_mix \ github \ project \ project \ coordin'
cwd
仅与一起工作,例如:
, shell=True
subprocess.Popen(command, cwd=path_to_work_dir, shell=True)
CWD:在执行孩子之前设置当前目录。
使用完整的路径或cwd
。不要同时做