💡
原文中文,约11700字,阅读约需28分钟。
📝
内容提要
subprocess.run 允许 Python 执行外部程序,env 参数影响环境变量的传递。默认为 None,传递空字典则无环境变量。当 shell 参数为 True 时,需传入完整命令字符串。不同平台对 args 的处理不同,Linux 需传入字符串,Windows 可用字符串或列表。使用时需注意环境设置,以避免找不到可执行文件的错误。
🎯
关键要点
- subprocess.run 允许 Python 执行外部程序,env 参数影响环境变量的传递。
- env 参数默认为 None,传递空字典则无环境变量。
- 当 shell 参数为 True 时,需传入完整命令字符串。
- 不同平台对 args 的处理不同,Linux 需传入字符串,Windows 可用字符串或列表。
- 使用时需注意环境设置,以避免找不到可执行文件的错误。
- 传递 None 给 env 参数会将当前环境变量全数传递给子进程。
- 传递空字典给 env 参数会导致子进程的环境变量为空。
- 传递自定义环境变量内容时,父进程的环境变量不会传入子进程。
- 在 Windows 上,shell 参数为 True 时会使用系统默认命令解释器。
- 在 Linux 上,shell 参数为 True 时 args 必须传入字符串,不能拆开成指令与参数的列表。
- 在 Windows 上,传递空环境变量不会影响执行,但在 Linux 上会导致找不到可执行文件的错误。
- 建议使用完整路径或相对路径传入 args 参数,以避免找不到可执行文件的情况。
❓
延伸问答
subprocess.run 的 env 参数有什么作用?
env 参数影响传递到子进程的环境变量,默认为 None,传递空字典则无环境变量。
在 Windows 和 Linux 中,subprocess.run 的 args 参数处理有什么不同?
在 Windows 中,args 可以是字符串或列表,而在 Linux 中,当 shell 参数为 True 时,args 必须是字符串。
如何避免在使用 subprocess.run 时找不到可执行文件的错误?
建议使用完整路径或相对路径传入 args 参数,以避免找不到可执行文件的情况。
当 shell 参数为 True 时,如何传递命令?
当 shell 参数为 True 时,需传入完整命令字符串,而不能拆分成指令与参数的列表。
传递空字典给 env 参数会有什么后果?
传递空字典给 env 参数会导致子进程的环境变量为空,可能会导致找不到可执行文件的错误。
如何在 subprocess.run 中传递自定义环境变量?
可以通过将自定义环境变量以字典形式传递给 env 参数来实现。
🏷️
标签
➡️