subprocess-popen-preexec-fn (PLW1509)
源自 Pylint 代码检查工具。
作用
检查 subprocess.Popen
的使用,如果使用了 preexec_fn
参数。
为什么这不好?
preexec_fn
参数在线程中是不安全的,因为它可能导致死锁。此外,preexec_fn
已被计划弃用。
作为替代方案,请考虑使用特定于任务的参数,例如 env
、start_new_session
和 process_group
。这些不易发生死锁,并且更加明确。
示例
import os, subprocess
subprocess.Popen(foo, preexec_fn=os.setsid)
subprocess.Popen(bar, preexec_fn=os.setpgid(0, 0))
建议改为
import subprocess
subprocess.Popen(foo, start_new_session=True)
subprocess.Popen(bar, process_group=0) # Introduced in Python 3.11