subprocess带shell=True运行用户Python脚本异常及资源限制问题咨询
问题原因
当使用shell=True时,subprocess.run对参数的处理逻辑和shell=False完全不同:
- 你当前传入的列表
['/usr/bin/python', 'foo.py'],shell会将/usr/bin/python作为要启动的程序,而foo.py会被当作shell自身的参数,不会传递给python进程。因此python没有收到要执行的脚本路径,直接进入交互模式挂起。 - 你测试gcc时能正常工作,大概率是测试时无意中调整了参数格式(比如改用了字符串命令),否则同样的参数格式会导致gcc因缺少输入文件报错,而非正常执行。
解决方案
有两种可靠的修正方式:
方式一:改用字符串形式传递完整命令
直接将整个命令写成字符串,shell会自动解析参数:
res = subprocess.run('/usr/bin/python foo.py', shell=True, capture_output=True)
方式二:按shell的参数规范传递列表
明确指定shell路径,并通过-c参数传递要执行的命令(这种方式更安全,避免字符串解析的潜在问题):
res = subprocess.run(['/bin/sh', '-c', '/usr/bin/python foo.py'], shell=True, capture_output=True)
额外注意点
你的代码中遗漏了import resource语句,需要在开头添加,否则会抛出NameError。
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

