Python,使用 subprocess.Popen 进行 linux 命令行调用?我收到“[Errno 2] 没有这样的文件或目录”

Posted

技术标签:

【中文标题】Python,使用 subprocess.Popen 进行 linux 命令行调用?我收到“[Errno 2] 没有这样的文件或目录”【英文标题】:Python, using subprocess.Popen to make linux command line call? I'm getting "[Errno 2] No such file or directory" 【发布时间】:2011-04-19 14:55:48 【问题描述】:

我正在尝试关注我可以找到的有关 subprocess.Popen 的信息,因为我想进行 linux 命令行调用。我正在尝试如下但收到错误“[Errno 2] No such file or directory ”。我没有尝试打开文件,所以我不理解这个错误,并且当我使用常规操作系统时它工作正常(尽管还有其他与等待进程完成相关的问题) .popen。

我似乎无法弄清楚如何正确执行此操作,感谢任何建议。

编辑:我使用的命令是复杂且多变的,在这里包含它太脱离上下文了,我认为只要说代码在我使用 os.popen 时有效而不是在我这样做时就足够了新方式,所以不,“linux命令行调用”显然不是我正在使用的调用

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

【问题讨论】:

这就是你试图运行的代码吗? 当然不是(你为什么还要问这个?)但是代码是可变的,没有上下文就没有多大意义。好吧,我会用其他一些基本代码测试它并更新发布 没关系,有人已经回答了下面的问题,显然他们能够理解我的意思 【参考方案1】:
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()

【讨论】:

你应该总是使用'​​ls'并将命令行调用放在第二部分吗?您发布的 shlex 的另一种方式似乎正在工作.. @Rick: ls 只是一个例子;您应该用您尝试运行的任何实际命令替换它。 我让subprocess.Popen(shlex.split('ls -l')) 用于基本命令,例如ls-l,但对于我的命令,即启动服务器,我仍然收到'[Errno 2] No such file or directory ',当相同的命令使用 os.popen 工作时。它太脱离上下文而无法进入此处的命令调用(它用于硒网络服务器),但我想知道系统在不同的调用方式之间接收到的内容是否有任何区别,因为我不能弄清楚它为什么这样做 @Rick:也许尝试给出命令中引用的任何文件的完整路径。也许像 proc=subprocess.Popen(shlex.split('java -jar /full/path/to/selenium-server.jar')) 这样的东西,当然,你应该将 /full/path/to 替换为合适的。

以上是关于Python,使用 subprocess.Popen 进行 linux 命令行调用?我收到“[Errno 2] 没有这样的文件或目录”的主要内容,如果未能解决你的问题,请参考以下文章

粘包问题,以及在python中如何调用操作系统命令

python subprocess模块 监控子进程的2种方式 忙等待和立即返回同时设置子进程超时

Python3 - 清理用户输入以供 shell 使用

python使用独立空间

使用嵌入式 Python

python使用cookie登陆网页