同时加载两个python脚本时出现SQLite错误

问题描述:

我有两个python脚本必须同时运行,因为它们相互交互。一个脚本是在本地运行的“服务器”脚本,另一个脚本是通过套接字连接到它的客户端脚本。通常情况下,我只需打开一对终端选项卡,然后在其中一个客户端运行服务器脚本。开始,一遍又一遍停止每个脚本之后,我想作一个bash别名只用一个命令运行的脚本和与此想出了:同时加载两个python脚本时出现SQLite错误

gnome-terminal --tab -e "python server.py" --tab -e "python client.py" 

不过,现在的服务器脚本是提高一个SQLite OperationalError说我的一个数据表不存在。但是当我手动运行脚本时,一切正常。我不知道发生了什么,但我认为可能一起运行脚本并没有给服务器脚本足够的时间来初始化并连接到数据库。所以我在客户端脚本中放了一个time.sleep(5),但是一旦启动,我就会得到相同的错误。

任何人都有一个想法可能会发生什么?或者是否有人知道用一个命令启动两个python脚本的替代方法?

尝试将两个命令合二为一:

gnome-terminal --tab -x bash -c "python server.py & sleep 5; python client.py" 

我认为这是更好地把睡眠命令(如果需要)外的客户,因为可能存在的服务器已经启动的情况下,客户机将不必睡觉。


-x标志意味着

-x, --execute 
     Execute the remainder of the command line inside the terminal. 

命令调用的bash:反过来

bash -c "python server.py & sleep 5; python client.py" 

庆典,有-c标志,这意味着

-c string If the -c option is present, then commands are read from string. If 
     there are arguments after the string, they are assigned to the posi‐ 
     tional parameters, starting with $0. 

你可能想要尝试

gnome-terminal --tab -e "python server.py & sleep 5; python client.py" 

这也可能起作用。当你先运行bash,然后你的〜/ .bashrc被读取。在不调用bash的情况下,我认为默认情况下会调用/ bin/sh。

如果你

"socket.error: [Errno 98] Address already in use", 

这可能意味着你的服务器已经启动,并运行第二次失败的服务器。

+0

你想在睡眠中“睡5”,而不是“时5”。另外,您不想将此睡眠发送到背景。所以:'python server.py&sleep 5; python client.py' – eumiro 2010-09-24 11:14:43

+0

@eumiro:哎呀,谢谢。 – unutbu 2010-09-24 11:16:36

+0

我不明白为什么,但您的解决方案完美无缺! -x和-c选项有什么作用?我在man page中看不到这些内容。 – pythonBOI 2010-09-24 11:28:37