0

クラスsubprocessとともにモジュールを使用して、プロセスを作成および実行しようとしています。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上記の -call では作成できないというのはどうしてでしょうか?

編集

Python 2.7が内部で実行されているparaviewバージョンをダウンロードしてインストールし(上記で使用したバージョンのpython 2.5ではありません)、呼び出しがPopen機能します。したがって、これは paraview の python バージョンと関係があるに違いありません。残っている唯一の質問は次のとおりPopenです。

4

2 に答える 2

3

ストレージには2つのものがあります:

  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.pywithキーワードを使用しています。これは Python 2.7 を対象としているため、問題ありません。実行している python バージョンは、Python 2.5 からのもののようです。with2.4 にはバックがなく、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 に答える