1

我有两个必须同时运行的 python 脚本,因为它们相互交互。一个脚本是本地运行的“服务器”脚本,另一个是通过套接字连接到它的客户端脚本。通常我只打开几个终端选项卡并在一个中运行服务器脚本,在另一个中运行客户端。在一遍又一遍地启动和停止每个脚本之后,我想创建一个 bash 别名来只用一个命令运行这两个脚本,并想出了这个:

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

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

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

4

1 回答 1

0

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

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

我认为最好将 sleep 命令(如果需要)放在客户端之外,因为可能存在服务器已经启动并且客户端不必休眠的情况。


-x 标志意味着

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

该命令调用 bash:

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

bash 反过来,有一个 -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",

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

于 2010-09-24T10:56:13.193 回答