在python中创建子进程
我试图使用在python中创建子进程,python,subprocess,popen,paraview,Python,Subprocess,Popen,Paraview,我试图使用子流程模块和Popen类来创建和运行流程。到目前为止,我一直成功地调用我想要的任何程序 现在我尝试调用paraview(版本3.8.1),并将python脚本作为参数附加到它,如下所示: paraview --script=script.py 如果我从控制台运行这个命令,它就可以正常工作。如果我尝试使用我的Popen类运行它,它将失败,并显示错误消息: /home/woltan/local/lib/python2.7/site.py:157: Warning: 'with' will
子流程
模块和Popen
类来创建和运行流程。到目前为止,我一直成功地调用我想要的任何程序
现在我尝试调用paraview
(版本3.8.1),并将python脚本作为参数附加到它,如下所示:
paraview --script=script.py
如果我从控制台运行这个命令,它就可以正常工作。如果我尝试使用我的Popen
类运行它,它将失败,并显示错误消息:
/home/woltan/local/lib/python2.7/site.py:157: Warning: 'with' will become a reserved keyword in Python 2.6
'import site' failed; use -v for traceback
/home/woltan/local/lib/python2.7/linecache.py:127: Warning: 'with' will become a reserved keyword in Python 2.6
/home/woltan/local/lib/python2.7/site.py:157: Warning: 'with' will become a reserved keyword in Python 2.6
'import site' failed; use -v for traceback
ERROR: In /home/kitware/Kitware/ParaView-3.8.1/source/Utilities/VTKPythonWrapping/Executable/vtkPVPythonInteractiveInterpretor.cxx, line 75
vtkPVPythonInteractiveInterpretor (0x124e9d0): Failed to locate the InteractiveConsole object.
Paraview本身正在启动。但是错误消息是否是因为paraview本身有一个它正在使用的python解释器?或者我可以调整我的Popen
调用例程,如下所示:
p = subprocess.Popen("paraview --script=script.py", bufsize = -1, shell = True)
如何可以从控制台创建一个进程,但不能使用上面的Popen
-调用
编辑
我下载并安装了一个paraview版本,其中运行着python2.7(而不是我上面使用的python2.5版本),调用
Popen
可以工作。所以这一定与paraview的python版本有关。剩下的唯一问题是:当我用Popen
启动一个进程时,为什么这很重要?您收到的错误消息似乎与子进程.Popen
无关。我想说,您需要的是shell=True
:
p = subprocess.Popen("paraview --script=script.py", shell = True)
或按顺序分开args
:
p = subprocess.Popen(['paraview', '--script=script.py'])
我从未使用过
bufsize
,但我认为它在这里没有任何区别。您收到的错误消息似乎与子流程.Popen
无关。我想说,您需要的是shell=True
:
p = subprocess.Popen("paraview --script=script.py", shell = True)
或按顺序分开args
:
p = subprocess.Popen(['paraview', '--script=script.py'])
我从未使用过bufsize,但我认为它在这里没有任何区别。有两件事是有区别的:
shell=False
,因此需要使用一个序列作为第一个参数:
p = subprocess.Popen(("paraview", "--script=script.py"), bufsize=-1)
(shell=False
是默认值。)/home/woltan/local/lib/python2.7/site.py:157: Warning: 'with' will become a reserved keyword in Python 2.6
上述
site.py
使用with
关键字。这没关系,因为它是为Python2.7设计的。您正在运行的python版本似乎来自python 2.5。早在2.4中就没有和,而在2.6中它已经存在了。有两件事是有区别的:
通常情况下,这个电话根本不起作用。由于您有shell=False
,因此需要使用一个序列作为第一个参数:
p = subprocess.Popen(("paraview", "--script=script.py"), bufsize=-1)
(shell=False
是默认值。)
您似乎混合了几种Python版本:
/home/woltan/local/lib/python2.7/site.py:157: Warning: 'with' will become a reserved keyword in Python 2.6
上述site.py
使用with
关键字。这没关系,因为它是为Python2.7设计的。您正在运行的python版本似乎来自python 2.5。早在2.4中就没有,在2.6中它已经存在了。如果我使用subprocess.Popen([“paraview--script=script.py”],shell=True)
…应该是[“paraview”,“--script=script.py”]
如果我使用subprocess.Popen([“paraview--script=script.py”],shell=True)
…应该是[“paraview”,“--script=script.py”]
关于#1:对于shell=False
,我真的很抱歉。我只是用它来调试问题,我错贴了#2您是对的,paraview使用Python2.5。但是,如果我只使用Python2.7创建一个进程,为什么会出现这个问题呢?paraview
使用Python2.5,而您使用的是Python2.7,这对于子进程来说应该不是问题。无论如何,您是否检查过paraview
是否真的在使用python 2.5?我的意思是,Python2.5没有被Python2.7作为默认的python版本所掩盖?@jcollado dosys.version
给出了2.5.4(r254:679162010年9月9日,17:20:10)
。如果这没有显示阴影,请告诉我如何正确检查版本。我不知道python是如何在paraview中启动的,但它可能是在您的路径中找到的第一个python二进制文件,因此您只需检查哪个python
的输出。无论如何,为了获得价值,我在发行版中使用打包系统安装了paraview,但没有发现任何问题(实际上并不需要python 2.5)。如果您在本地python安装中遇到问题,也许您应该尝试打包系统(或者如果您没有安装权限,请询问您的系统管理员)。关于#1:对于shell=False
,我非常抱歉。我只是用它来调试问题,我错贴了#2您是对的,paraview使用Python2.5。但是,如果我只使用Python2.7创建一个进程,为什么会出现这个问题呢?paraview
使用Python2.5,而您使用的是Python2.7,这对于子进程来说应该不是问题。无论如何,您是否检查过paraview
是否真的在使用python 2.5?我的意思是,Python2.5没有被Python2.7作为默认的python版本所掩盖?@jcollado dosys.version
给出了2.5.4(r254:679162010年9月9日,17:20:10)
。如果这没有显示阴影,请告诉我如何正确检查版本。我不知道python是如何在paraview中启动的,但它可能是在您的路径中找到的第一个python二进制文件,因此您只需检查哪个python
的输出。无论如何,为了获得价值,我在发行版中使用打包系统安装了paraview,但没有发现任何问题(实际上并不需要python 2.5)。如果您在本地python安装中遇到问题,也许您应该尝试打包系统(或者如果您没有安装权限,请询问您的系统管理员)。我认为Popen
在不同的进程中执行命令没有任何问题。自动导入错误的site.py
的是python2.5
进程。我