Python subprocess.run 无法执行当前目录下的可执行文件

查看 50|回复 5
作者:nyxsonsleep   
# 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 的方法。
  • ysc3839   
    根据 CreateProcessW 文档的说法,是不会去参数里指定的 cwd 搜索可执行文件的,只会在当前进程的 cwd 中搜索。
    https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessw
    chenqh   
    为什么不使用绝对路径呢?
    nyxsonsleep
    OP
      
    @chenqh 这里不希望使用绝对路径。而且用 shell=True 就不用绝对路径也能执行。
    而且如果改变 os.environ 的 PATH 参数,就能不在绝对路径的情况下执行了。
    这个函数的行为比较奇怪。
    nyxsonsleep
    OP
      
    @ysc3839 如果改变 os.environ 有效,但是改变 env 参数无效又是为什么呢?
    ysc3839   
    @nyxsonsleep 因为也只会在当前进程的 PATH 中搜索,不会去参数里指定的 PATH 搜索
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部