1

wine を使用してプログラムを起動する Python スクリプトに問題があります。起動したプログラムは、Eclipse/Pydev でスクリプトを実行するとクラッシュしますが、スクリプトをシェル (コマンド ライン) から実行すると成功します。これは、Pydev コンテキストの実行によるものだと思います。

エンコンディングの場合、IDE から実行した場合とシェルから実行した場合は、それぞれ utf8 と ascii が返されることを知っているので、問題を引き起こす可能性のあるコンテキスト構成の違いがいくつかあると思います。また、メニュー実行構成->共通でエンコーディングを変更できることも知っています。しかし、問題を解決するセットアップが見つかりませんでした。問題を解決するためのコンテキストの違いを知る方法はありますか?

問題をより正確にするために、精度があります。

Python 2.7 スクリプトから一緒に起動する必要がある 2 つの Windows プログラム (prog1.exe と prog2.exe としましょう) があります。私は Linux (Ubuntu 12.04) で作業しているので、プログラムの起動には wine を使用しています。subprocess.Popen() を使用してそれらを実行し、次にポーリングする python スクリプトを作成しました。

Eclipse (Indigo および Juno) で Pydev を使用して、スクリプトをデバッグします。

私のスクリプトは次のようになります。

from time import sleep
import subprocess

cmd_prog1 = ['wine', '/home/user/folder/to/progs/prog1.exe','--arg1','/home/user/folder/to/conf1/file1','--arg2','/home/user/folder/to/conf1/file2','--arg3','some_arg',....]
cmd_prog2 = ['wine', '/home/user/folder/to/progs/prog2.exe','--arg1','/home/user/folder/to/conf2/file1','--arg2','/home/user/folder/to/conf2/file2','--arg3','some_arg',....]

file1 = "/home/user/result/folder/file1.txt"
file2 = "/home/user/result/folder/file2.txt"

o_file1 = open(file1, "w+")
p_prog1 = subprocess.Popen(cmd_prog1,shell=False,stdout=o_file1,stderr=o_file1)
o_file2 = open(file2, "w+")
p_prog2 = subprocess.Popen(cmd_prog1,shell=False,stdout=o_file2,stderr=o_file2)

res_prog1 = None
res_prog2 = None
timer = 0
while res_prog1 == None or res_prog2 == None:
    timer += 1
    sleep(1)
    res_prog1 = p_prog1.poll()
    res_prog2 = p_prog2.poll()
    print timer

o_file1.close()
o_file2.close()

print res_prog1, res_prog2

シェルから Python スクリプトを起動すると、問題なく動作し、prog1 と prog2 は 8 秒後に 0 を返し、file1 と file2 に正しいログを取得します。

IDE からスクリプトを起動すると、prog1 と prog2 は 2 秒後に 3 を返し、次のエラーが発生します。

Fatal Python error: buffer overflow in getpathp.c's joinpath()
fixme:msvcr90:__clean_type_info_names_internal (0x1e1f9bc8) stub

最後のメッセージも正しい動作で存在しますが、実際には問題ではありません

返信ありがとう

4

0 に答える 0