使用subprocess.Popen调用Python脚本报错的解决咨询
解决subprocess.Popen调用Python脚本的FileNotFoundError问题
出现这个错误的核心原因是subprocess.Popen默认不会解析字符串形式的命令参数,它会把整个字符串当作要执行的程序名,自然找不到对应的文件。以下是两种可靠的解决方法:
方法一:使用列表形式传递参数(推荐)
这是subprocess模块的标准用法,避免shell注入风险,同时让参数解析更准确:
import subprocess # 将命令拆分为列表元素,依次是解释器、脚本路径、各个参数 subprocess.Popen( ["python3", "eclat_model.py", "-p", "-c", "raw_data_430.csv", "-C", "out-eclat_430.csv", "-m", "100"] )
方法二:启用shell模式(不推荐,仅特殊场景使用)
如果一定要用字符串形式的完整命令,需要设置shell=True,让系统shell来解析整个命令:
import subprocess subprocess.Popen( "python3 eclat_model.py -p -c raw_data_430.csv -C out-eclat_430.csv -m 100", shell=True )
额外注意事项
- 如果脚本
eclat_model.py不在当前Python进程的工作目录下,需要传入脚本的绝对路径,或者通过cwd参数指定子进程的工作目录:# 示例:指定脚本所在目录作为子进程工作目录 subprocess.Popen( ["python3", "eclat_model.py", "-p", "-c", "raw_data_430.csv", "-C", "out-eclat_430.csv", "-m", "100"], cwd="/path/to/your/script/directory" ) - 确保
python3在子进程的环境变量PATH中,或者直接使用python3的绝对路径(比如/usr/bin/python3)来避免路径问题。
内容的提问来源于stack exchange,提问作者vojtam
相关产品推荐
相关产品推荐

