使用subprocess.call运行脚本丢失export环境变量,如何保留?
解决subprocess启动子进程时保留终端环境变量的问题
要让myStuff.py获取到终端中export的环境变量,有两种靠谱的解决方式:
显式传递当前进程的环境变量
subprocess默认会继承父进程的环境变量,但显式指定env参数能确保变量被正确传递。修改代码如下:import subprocess import os subprocess.call( ["bash", "-c", "nohup python3 myStuff.py > /dev/null 2>&1&"], env=os.environ )os.environ包含了当前Python进程的所有环境变量(包括终端中export的那些),将它传给subprocess的env参数,子进程就能完整继承这些变量。简化启动命令,避免嵌套bash
没必要通过bash -c启动nohup,直接调用nohup和Python命令,更直接地继承环境变量:import subprocess import os subprocess.call( ["nohup", "python3", "myStuff.py"], stdout=open("/dev/null", "w"), stderr=subprocess.STDOUT, start_new_session=True, env=os.environ )这里通过
stdout和stderr参数重定向输出到/dev/null,start_new_session参数让进程脱离终端后台运行,效果和原来的命令一致,但更简洁可靠。
内容的提问来源于stack exchange,提问作者user21872982
相关产品推荐
相关产品推荐

