2

I am trying to use python subprocess to call an exe. The application usually takes the parameter file from the same directory as exe. However, as the python file is not located at the same directory as exe, the exe cannot find the parameter file when called by subprocess.run. Hence I specified the cwd when calling subprocess.run like below:

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

However the subprocess still cannot find the dat file in

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

The error message appears as

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'Warning: unable to find d:\Study\softBV_mix\GitHub\projects\Coord\database_unitary.dat

where the database_unitary.dat is supposed to be in .../coord/bin/. The application works well if I call it from powershell or command prompt.

Roy Dai
  • 483
  • 2
  • 5
  • 15

1 Answers1

3

No one has answered my question but I kind of found the workaround myself though I am sure if I identify the root cause correctly.

In the end I imported os and make sure cwd is the recognised absolute addresss

import os

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

This worked out.

So the expression

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

make cause the issue. Hope some PRO can further clarify this.

Roy Dai
  • 483
  • 2
  • 5
  • 15