# C:/tmp/h.bat exist. subprocess.run(["h.bat"],cwd=r'C:/tmp', shell=False) 报错FileNotFoundError: [WinError 2] 系统找不到指定的文件。 [ol]不能使用 shell=True ,这种情况下可以执行 h.bat ,但是 review 要求不能使用。尝试了改变 run 函数的 env 参数,但是无效。可以减少内容,但是不能改变内容。不明原因 [/ol] 寻求一种方法直接可以运行 subprocess.run 函数直接执行 h.bat 的方法。
根据 CreateProcessW 文档的说法,是不会去参数里指定的 cwd 搜索可执行文件的,只会在当前进程的 cwd 中搜索。 https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessw
@chenqh 这里不希望使用绝对路径。而且用 shell=True 就不用绝对路径也能执行。 而且如果改变 os.environ 的 PATH 参数,就能不在绝对路径的情况下执行了。 这个函数的行为比较奇怪。