0

我正在尝试将 thsubprocess模块与Popen类一起使用来创建和运行进程。直到现在,我总能成功调用任何我想要的程序。

现在我正在尝试paraview使用附加的python脚本作为参数调用(版本3.8.1),如下所示:

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上面的 -call?

编辑

我下载并安装了一个 paraview 版本,其中运行了 python 2.7(而不是我上面使用的版本的 python 2.5)和Popen作品的调用。所以这一定和paraview的python版本有关。剩下的唯一问题是:为什么当我开始一个进程时它甚至很重要Popen

4

2 回答 2

3

有两件事是很戏剧性的:

  1. 通常,这个调用根本不应该工作。正如您所拥有的shell=False,您需要使用序列作为第一个参数:

    p = subprocess.Popen(("paraview", "--script=script.py"), bufsize=-1)
    

    shell=False是默认设置。)

  2. 您似乎混合了几个 Python 版本:

    /home/woltan/local/lib/python2.7/site.py:157: Warning: 'with' will become a reserved keyword in Python 2.6
    

site.py使用with关键字。没关系,因为它适用于 Python 2.7。您正在运行的 python 版本似乎来自 Python 2.5。在 2.4中没有with后退,在 2.6 中它已经存在。

于 2011-11-17T08:39:29.300 回答
1

您收到的错误消息似乎与subprocess.Popen. 我会说你需要的是shell=True

p = subprocess.Popen("paraview --script=script.py", shell = True)

args按顺序分开:

p = subprocess.Popen(['paraview', '--script=script.py'])

我从来没有使用过bufsize,但我认为它在这里没有任何区别。

于 2011-11-17T08:36:41.350 回答