Python,使用subprocess.Popen调用Linux命令时出现"[Errno 2]没有这样的文件或目录"错误?

6 投票
1 回答
21815 浏览
提问于 2025-04-16 04:49

我正在尝试了解关于subprocess.Popen的信息,因为我想在Linux命令行中调用一些命令。我按照下面的方式尝试,但出现了错误“[Errno 2] No such file or directory”。我并不是想打开一个文件,所以我不明白这个错误的意思。而且,当我使用普通的os.popen时,它运行得很好(虽然有其他问题,比如我不想等待进程完成时的情况)。

我似乎无法弄清楚该怎么做,任何建议都很感激。

补充说明:我使用的命令比较复杂,并且有变量,所以在这里提到会显得不太合适。我觉得可以说的是,当我使用os.popen时代码是可以工作的,而用新方法时就不行,所以“Linux命令行调用”显然不是我正在使用的调用。

subprocess.Popen([r"linux command line call"])
>>> [Errno 2] No such file or directory

1 个回答

17
import subprocess    
proc=subprocess.Popen(['ls','-l'])  # <-- Change the command here
proc.communicate()

Popen 这个东西需要你给它一个字符串列表。第一个字符串通常是你想要运行的程序,后面的是它的参数。有时候,当命令比较复杂时,使用 shlex.split 可以帮你自动把这些字符串整理成列表,这样会方便很多:

import shlex
proc=subprocess.Popen(shlex.split('ls -l'))  
proc.communicate()

撰写回答