在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
    是默认值。)

  • 您似乎混合了几种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中它已经存在了。

    有两件事是有区别的:

  • 通常情况下,这个电话根本不起作用。由于您有
    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 do
    sys.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 do
    sys.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
    进程。我