2010-12-13 11 views
1
私はしかし、Antのベースのフレームワークのバッチファイル(Helium.bat)

Pythonの:NameError:名前「バッファは」アリベースのフレームワークのバッチファイル

subprocess.Popen('hlm '+commands, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

を実行するPythonスクリプトを使用してい

で定義されていません。

import codecs 
    File "C:\Python25\lib\codecs.py", line 1007, in <module> 
    strict_errors = lookup_error("strict") 
    File "C:\Python25\lib\codecs.py", line 1007, in <module> 
    strict_errors = lookup_error("strict") 
    File "C:\Python25\lib\encodings\__init__.py", line 31, in <module> 
    import codecs, types 
    File "C:\Python25\lib\types.py", line 36, in <module> 
    BufferType = buffer 
NameError: name 'buffer' is not defined 

私は、コマンドラインで直接.batファイルを実行すると、すべての問題がありません。それは.BATファイルを実行すると、スクリプトは、必ず次のエラーを停止し、表示します。

答えて

1

少なくとも、問題の一部はバッチファイルの実行方法です。このPopenに異なる引数を渡す

# execute the batch file as a separate process and echo its output 
Popen_kwargs = { 'stdout': subprocess.PIPE, 'stderr': subprocess.STDOUT, 
       'universal_newlines': True } 
with subprocess.Popen('hlm '+commands, **Popen_kwargs).stdout as output: 
    for line in output: 
     print line, 

- 違いを、このバージョンは、バッチファイルには必要ありませんshell=Trueを削除され、stdoutが起こっているのと同じ場所にstdoutをリダイレクトstderr=subprocess.STDOUTを設定します。これを試してみますエラーメッセージが表示されないようにして、universal_newlines=Trueを追加して出力をより読みやすくします。

もう1つの違いは、Popenプロセスの出力を読み取り、出力することです。これは、バッチファイルを実行しているPythonスクリプトが、実行が完了するまで待ってから実行することが効果的です。

+0

@BiX:codecs.pyにSyntaxErrorが含まれている可能性は非常に低く、コード行に「入力時に実行可能な代替」という文字列が含まれている必要があります。 Pythonをアップグレードした後に再インストールする必要があるため、Gladeの 'ImportError'が得られる可能性が高いです(これは標準のPythonライブラリモジュールではありません)。 – martineau

+0

Pythonスクリプトからコマンドラインでバッチファイルを実行する代わりに、バッチファイルをコマンドラインで使用するだけで、これらのエラーは発生しません。 悲しいことに、何度もグライドを再インストールしようとしましたが、それでも動作しませんでした=/ – BiX

+0

@BiX:あなたがしていたことはわかりませんでした。あなたの質問を更新してバッチファイルをどのように*実行しているかを見せてください - それは少なくとも問題の一部であるかもしれないように思えます。 – martineau

関連する問題