Python,使用subprocess.Popen进行linux命令行调用?I';“我得到了”;[Errno 2]没有这样的文件或目录";
我试图按照我能找到的有关subprocess.Popen的信息进行操作,因为我想进行linux命令行调用。。我正在尝试如下操作,但得到错误“[Errno 2]没有这样的文件或目录”。我没有试图打开一个文件,所以我不理解这个错误,当我使用一个普通的os.popen时,它可以很好地工作(尽管还有其他问题与等待进程完成有关,而我不希望它完成) 我似乎不知道如何正确地做这件事,任何建议都很感激 编辑:我正在使用的命令是复杂的和可变的,它太脱离上下文而不能包含在这里,我认为只要说当我使用Python,使用subprocess.Popen进行linux命令行调用?I';“我得到了”;[Errno 2]没有这样的文件或目录";,python,command-line,subprocess,popen,Python,Command Line,Subprocess,Popen,我试图按照我能找到的有关subprocess.Popen的信息进行操作,因为我想进行linux命令行调用。。我正在尝试如下操作,但得到错误“[Errno 2]没有这样的文件或目录”。我没有试图打开一个文件,所以我不理解这个错误,当我使用一个普通的os.popen时,它可以很好地工作(尽管还有其他问题与等待进程完成有关,而我不希望它完成) 我似乎不知道如何正确地做这件事,任何建议都很感激 编辑:我正在使用的命令是复杂的和可变的,它太脱离上下文而不能包含在这里,我认为只要说当我使用os.popen时
os.popen
时代码可以工作就足够了,而当我使用新方法时就不行了,所以不,“linux命令行调用”显然不是我正在使用的调用
subprocess.Popen([r"linux command line call"])
>>> [Errno 2] No such file or directory
这就是您试图运行的代码吗?当然不是(为什么您会问这个问题?),但是代码是可变的,如果没有上下文,在这里就没有多大意义。。好的,我将用其他一些基本代码测试它,并更新postnevermind,有人已经回答了下面的问题,显然他们能够理解我的意思。您是否应该始终使用“ls”并将命令行调用放在第二部分?你发布的shlex的另一种方式似乎很有效。@Rick:
ls
只是一个例子;您应该用您试图运行的任何实际命令来替换它。我得到了subprocess.Popen(shlex.split('ls-l'))
来处理基本命令,比如ls-l
,但是对于我的命令,即启动服务器,我仍然得到“[Errno 2]没有这样的文件或目录”,而同样的命令使用os.Popen工作。这里的命令调用(对于selenium web服务器)太离题了,但我想知道,在不同的调用方式之间,系统接收到的内容是否有任何区别,因为我不知道为什么会这样做this@Rick:可能尝试提供命令中引用的任何文件的完整路径。可能类似于proc=subprocess.Popen(shlex.split('java-jar/full/path/to/selenium server.jar'))
当然,您应该替换/full/path/to
。
import subprocess
proc=subprocess.Popen(['ls','-l']) # <-- Change the command here
proc.communicate()
import shlex
proc=subprocess.Popen(shlex.split('ls -l'))
proc.communicate()