我在使用 wine 启动程序的 Python 脚本中遇到问题。当脚本在 Eclipse/Pydev 下执行时,启动的程序崩溃,而当脚本从 shell(命令行)运行时它们成功。我认为这应该是由于 Pydev 上下文执行。
我知道对于编码,从 IDE 和 shell 运行分别返回 utf8 和 ascii,所以我认为有一些上下文配置差异可能会导致我的问题。我也知道可以在菜单运行配置->通用中更改编码。但我没有找到任何解决我的问题的设置。有没有办法知道解决我的问题的上下文差异是什么?
为了更准确地解决这个问题,有一些精度:
我有两个 Windows 程序(比如说 prog1.exe 和 prog2.exe),我必须从 Python 2.7 脚本一起启动它们。我在 Linux (Ubuntu 12.04) 下工作,所以我使用 wine 来启动程序。我编写了一个 python 脚本,使用 subprocess.Popen() 然后轮询运行它们。
我使用 Pydev 和 Eclipse(Indigo 和 Juno)来调试我的脚本。
这是我的脚本的样子:
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
当我从 shell 启动我的 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
最后一条消息也出现在正确的行为中,但不是真正的问题
谢谢您的回复